赞
踩
启动浏览器
webdriver.Chrome()
webdriver.Firefox()
webdriver.Ie()
元素选取
单个元素查找方法
注: 其中的element加上一个s,则是对应的多个元素的查找方法
通过xpath查找
find_element_by_xpath()
通过id查找
find_element_by_id()
通过class属性查找
find_element_by_class_name()
通过css选择器查找 ( 语法规则 )
find_element_by_css_selector()
通过链接文本查找
find_element_by_link_text()
通过链接文本的部分匹配查找
find_element_by_partial_ink_text()
通过name属性进行查找
find_element_by_name()
通过标签名查找
find_element_by_tag_name()
两种方法集成了上面所有的查找方法
find_element(By.ID, ‘…’)
通过ID查找一个
find_elements(By.XPATH, ‘…’)
通过Xpath查找多个
By.xxx 选择使用的查找方法,使用xxx方式解析
By对象导入: from selenium.webdriver.common.by import By
输入、清除、点击
输入内容
send_keys(‘内容’)
清除内容
clear()
点击
click()
关闭窗口、浏览器
关闭当前句柄窗口(不关闭进程)
close()
关闭整个浏览器进程
quit()
窗口切换
用selenium操作的是第一个打开的窗口,新打开的窗口是无法直接去操作的
需要切换窗口的句柄
获取所有窗口的句柄
window_handles
window_handles的顺序并不是浏览器上窗口的顺序
获取当前窗口的句柄
current_window_handle
切换句柄到指定的窗口
switch_to.window( window_handles[1] )
页面(frame)切换
iframe标签 通常出现在登录页面
切到指定frame,可用id、name、元素定位
switch_to.frame()
切到父级frame,如果已是主文档,则无效果,相当于后退回去
driver.switch_to.parent_frame()
切换到主页面,DOM树最开始的frame
driver.switch_to_default_content()
页面弹窗
定位到alert弹窗,返回一个弹窗的对象
switch_to.alert
对弹窗对象的取消操作(相当于点击弹窗上的取消按钮)
dismiss()
对弹窗对象的确定操作(相当于点击弹窗上的确定按钮)
accept()
对弹窗对象内的输入框输入数据(针对于prompt弹窗)
send_keys(key)
获取弹窗内的文本
text
等待加载
导入WebDriverWait
from selenium.webdriver.support.wait import WebDriverWait
导入expected_conditions
from selenium.webdriver.support import expected_conditions as EC
显式等待
指定某个条件,然后设置最长等待时间,每隔一定时间检查一次(默认0.5秒)
如果条件成立,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出超时异常:TimeoutException
WebDriverWait(driver, timeout, poll_frequency,igonred_exceptions).until(method, message)
driver:WebDriver的实例
timeout: 等待的最长时间
poll_frequency:调用until中的方法的间隔时间,默认0.5秒
igonred_exceptions:忽略的异常,如果在调用until的过程中抛出这个元组中的异常,则不中断代码,继续等待
等待条件:expected_conditions
这两个条件验证元素是否出现,传入的参数都是元组类型的locator,如(By.ID, ‘kw’),一个只要一个符合条件的元素加载出来就通过;另一个必须所有符合条件的元素都加载出来才行
presence_of_element_located (这个用的次数最多)
presence_of_all_elements_located
这两个条件类验证title,验证传入的参数title是否等于或包含于driver
title_is
title_contains
这三个条件验证元素是否可见,前两个传入参数是元组类型的locator,第三个传入WebElement
visibility_of_element_located
invisibility_of_element_located
visibility_of
判断某段文本是否出现在某元素中,一个判断元素的text,一个判断元素的value
text_to_be_present_in_element
text_to_be_present_in_element_value
判断frame是否可切入,可传入locator元组或者直接传入定位方式:id、name、index或WebElement
frame_to_be_available_and_switch_to_it
判断是否有alert出现
alert_is_present
判断元素是否可点击,传入locator
element_to_be_clickable
隐式等待
设置一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步
隐性等待对整个driver的周期都起作用,所以只要设置一次即可,默认等待时间为0
driver.implicitly_wait(10) #隐式等待,最长10s
弊端
程序会一直等待整个页面加载完成,就算你需要的元素加载出来了还是需要等待
也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步
隐性等待和显性等待可以同时用,等待的最长时间取两者之中的最大者
动作链
导入ActionChains:from selenium.webdriver.common.action_chains import ActionChains
执行链中的所有动作
perform()
点击鼠标左键,按住不放
click_and_hold(on_element=None)
在某个元素位置松开鼠标左键
release(on_element=None)
将鼠标移动到当前鼠标位置的偏移位置
move_by_offset(xoffset, yoffset)
将鼠标移动到距某个元素多少距离的位置
move_to_element_with_offset(to_element, xoffset, yoffset)
拖拽到某个元素然后松开
drag_and_drop(source, target)
拖拽到某个坐标然后松开
drag_and_drop_by_offset(source, xoffset, yoffset)
鼠标移动到某个元素
move_to_element(to_element)
双击鼠标左键
double_click(on_element=None)
单击鼠标右键
context_click(on_element=None)
鼠标左键单击传入的元素
click(on_element=None)
键盘事件
Keys对象导入:from selenium.webdriver.common.keys import Keys
删除键(BackSpace)
send_keys(Keys.BACKSPACE)
空格键(Space)
send_keys(Keys.SPACE)
制表键(Tab)
send_keys(Keys.TAB)
回退键(Esc)
send_keys(Keys.ESCAPE)
回车键(Enter)
send_keys(Keys.ENTER)
全选(Ctrl+A)
send_keys(Keys.CONTROL,‘a’)
复制(Ctrl+C)
send_keys(Keys.CONTROL,‘c’)
剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘x’)
粘贴(Ctrl+V)
send_keys(Keys.CONTROL,‘v’)
键盘 F1
send_keys(Keys.F1)
键盘 F12
send_keys(Keys.F12)
执行js
execute_script( js语句 )
截图
截图保存
get_screenshot_as_file(‘***.png’)
将截图作为二进制数据返回
get_screenshot_as_png()
获取元素属性
获取元素标签上的属性
get_attribute(‘href’)
元素的坐标
location
元素的大小
size
获取网页源代码、刷新页面
网页源代码
page_source
刷新页面
refresh()
设置窗口大小
最小化
minimize_window()
最大化
maximize_window()
设置窗口具体的大小
set_window_size(width,height)
设置窗口位置
set_window_position(x,y)
设置代理、UA
设置代理
webdriver.ChromeOptions().add_argument(‘–proxy-server=http://IP:Port’)
设置UA
webdriver.ChromeOptions().add_argument(‘User-Agent=ua’)
"="两边不能有空格
Cookie操作
获取Cookie
get_cookies()
添加Cookie
add_cookie()
添加cookie前需要先打开任意一个网页
否则会报错:InvalidCookieDomainException: Message: invalid cookie domain
删除Cookie
delete_all_cookies()
Cookie键名
name:cookie的名称
value:cookie对应的值
domain:服务器域名
expiry:cookie有效终止日期
path:path属性定义了Web服务器上哪些路径下的页面可获取服务器设置的cookie
httpOnly:防脚本攻击
secure:规定cookie只能在https协议下才能够发送到服务器
跳过Selenium检测
window.navigator.webdriver
普通浏览器,js 中,window.navigator.webdriver 为 undefined
Selenium ,js 中,window.navigator.webdriver 为 True
使用
webdriver.ChromeOptions().add_experimental_option(‘excludeSwitches’, [‘enable-automation’])
代码演示
import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys # 登录QQ空间:frame切换、输入内容、清除内容、点击、键盘事件 driver = webdriver.Chrome() try: 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 # 执行js(滑动滚动条)、窗口切换、关闭窗口、关闭浏览器 driver = webdriver.Chrome() try: 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()
import time from selenium import webdriver # 设置窗口大小、获取网页源代码、刷新页面 driver = webdriver.Chrome() try: 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()
import time from selenium import webdriver # 设置代理、UA 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) try: 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() try: 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() try: 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()
import time from selenium import webdriver # 跳过Selenium检测 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 # }) # """ # }) try: driver.get('http://www.baidu.com') finally: time.sleep(10) driver.quit()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。