webdriver.ChromeOptions().add_experimental_option('excludeSwitches', ['enable-automation'])
driver.get("http://news.baidu.com/")
print('执行js打开新窗口前')
print('所有窗口的句柄:', driver.window_handles)
print('当前窗口的句柄:', driver.current_window_handle)
# 执行js打开新窗口
new_js = 'window.open("https://www.toutiao.com/")'
driver.execute_script(new_js)
print('执行js打开新窗口后')
all_handle = driver.window_handles
print('所有窗口的句柄:', all_handle)
print('当前窗口的句柄:', driver.current_window_handle)
print('切换句柄...')
driver.switch_to.window(all_handle[1])
print('当前窗口的句柄:', driver.current_window_handle)
# 页面高度
height = 0
# 执行js滑动滚动条
while height < 10000:
# 滑动滚动条到指定位置
driver.execute_script('document.documentElement.scrollTop=10000')
# 页面高度
height = driver.execute_script('return document.body.scrollHeight')
time.sleep(2)
# 关闭新打开的窗口
driver.close()
finally:
time.sleep(3)
# 关闭浏览器
driver.quit()
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("https://qzone.qq.com/")
time.sleep(0.5)
"""通过元素定位,切到指定frame(登录框)
frame = driver.find_element(By.XPATH,'//iframe')
driver.switch_to.frame(frame)
# 也可通过 ID 或 name 定位 frame
driver.switch_to.frame('login_frame')
# 点击 帐号密码登录
driver.find_element(By.LINK_TEXT, '帐号密码登录').click()
time.sleep(0.5)
text_box = driver.find_element(By.ID, 'u')
# 输入内容
text_box.send_keys('0123456789')
time.sleep(1)
# 清除内容
text_box.clear()
time.sleep(1)
text_box.send_keys('正确的账号')
password_box = driver.find_element(By.CSS_SELECTOR, '.inputstyle.password')
password_box.send_keys('正确的密码')
time.sleep(1.5)
# 执行键盘操作:回车键
password_box.send_keys(Keys.ENTER)
time.sleep(7)
finally:
time.sleep(3)
# 关闭浏览器
driver.quit()
页面弹窗、截图、获取元素属性
回到目录
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
time.sleep(0.3)
driver.find_element_by_link_text('设置').click()
time.sleep(0.3)
driver.find_element_by_link_text('搜索设置').click()
time.sleep(0.3)
driver.find_element_by_link_text('保存设置').click()
time.sleep(1)
# 获取弹窗的对象
alert_box = driver.switch_to.alert
# 获取弹窗的内容
print('弹窗内容:',alert_box.text)
# 对弹窗对象的确定操作
alert_box.accept()
# 按钮:百度一下
button = driver.find_element_by_css_selector('[type="submit"]')
# 获取元素标签上的属性
print('get_attribute:', button.get_attribute('value'))
# 元素的坐标
print('location:', button.location)
# 元素的大小
print('size:', button.size)
# 截图
driver.get_screenshot_as_file('1.png')
finally:
time.sleep(3)
# 关闭浏览器
driver.quit()
设置窗口大小、获取网页源代码、刷新页面 回到目录
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.toutiao.com/")
time.sleep(1)
# 最小化
driver.minimize_window()
time.sleep(1)
# 设置窗口具体的大小
driver.set_window_size(500,500)
time.sleep(1)
# 设置窗口位置
driver.set_window_position(800,200)
time.sleep(1)
# 最大化
driver.maximize_window()
time.sleep(1)
# 打印网页源码(JS渲染过的)
print(driver.page_source)
# 刷新当前页面
driver.refresh()
finally:
time.sleep(3)
# 关闭浏览器
driver.quit()
Cookie操作 回到目录
import time
import json
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.cnblogs.com/')
"""获取Cookie
# 等待60秒用于手动登录
time.sleep(60)
# 保存获取到的Cookie
cookies = driver.get_cookies()
with open('1.txt', 'w+') as f:
f.write(json.dumps(cookies))
"""添加Cookie
with open('1.txt') as f:
cookies = json.loads(f.read())
# 添加cookie前需要先打开任意一个网页
# 然后再进行添加
# 否则会报错:InvalidCookieDomainException: Message: invalid cookie domain
for cookie in cookies:
driver.add_cookie(cookie)
# 添加完毕后,再打开对应网页,便是已登录状态
driver.get('https://www.cnblogs.com/')
time.sleep(5)
"""清空cookie
driver.delete_all_cookies()
# 清空cookie后是未登录的状态
driver.get('https://www.cnblogs.com/')
finally:
time.sleep(3)
driver.quit()
import time
from selenium import webdriver
opt = webdriver.ChromeOptions()
# 设置代理
opt.add_argument('--proxy-server=http://121.40.162.239:808')
# 设置UA
opt.add_argument('User-Agent=ABCDEFG')
driver = webdriver.Chrome(options=opt)
driver.get('http://httpbin.org/get')
finally:
time.sleep(3)
driver.quit()
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get('https://www.python.org/getit/')
# 显式等待的等待条件 --> 参数为数组类型
method = EC.presence_of_element_located((By.LINK_TEXT, 'Downloads'))
# 显式等待
WebDriverWait(driver, 20, 0.2).until(method)
# 隐式等待
# driver.implicitly_wait(20)
driver.find_element(By.LINK_TEXT, 'Downloads').click()
finally:
time.sleep(10)
driver.quit()
import time
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get('http://www.treejs.cn/v3/demo/cn/exedit/drag.html')
time.sleep(2)
# 定位元素
element = driver.find_element_by_id('treeDemo_2_span')
target = driver.find_element_by_id('treeDemo_12_span')
# 动作链:拖拽
ActionChains(driver).drag_and_drop(element,target).perform()
finally:
time.sleep(10)
driver.quit()
跳过Selenium检测 回到目录
import time
from selenium import webdriver
opt = webdriver.ChromeOptions()
# 方法一
# opt.add_experimental_option('excludeSwitches', ['enable-automation'])
driver = webdriver.Chrome(options=opt)
# 方法二
# # 清除selenium webdriver的值
# driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
# "source": """
# Object.defineProperty(navigator,'webdriver',{
# get:()=>undefined
# })
# """
driver.get('http://www.baidu.com')
finally:
time.sleep(10)
driver.quit()