selenium 是最广泛使用的开源Web UI(用户界面)自动化测试套件之一。selenium测试脚本可以使用任何支持的编程语言进行编码,并且可以直接在大多数现代Web浏览器中运行。在爬虫领域selenium同样是一把利器,能够解决大部分的网页的反爬问题。
一、selenium 安装
pip install selenium
二、安装浏览器驱动
针对不同的浏览器,需要安装不同的驱动
以谷歌为例,安装chromedriver,下载到python环境目录下
针对本机浏览器版本,选择对应的chromedriver版本
https://registry.npmmirror.com/binary.html?path=chromedriver/
from selenium import webdriver
# 不自动关闭浏览器
option = webdriver.ChromeOptions()
option.add_experimental_option('detach',True)
# 将option作为参数添加到Chrome中
driver = webdriver.Chrome(chrome_option = option)
driver.get('https://www.csdn.net/')
三、元素定位
id
driver.find_element_by_id( id )
name
driver.find_element_by_name( name )
class
driver.find_element_by_class_name(class)
tag
driver.find_element_by_tag_name( div )
xpath
driver.find_element_by_xpath()
link 专门用来定位文本链接
driver.find_element_by_link_text( 文本 )
partial_link 部分链接 对于文本很长时,可以只定义部分文本
driver.find_element_by_partial_link_text( 文本 )
定位一组元素使用的方法只需将 element 改为 elements 即可
四、浏览器控制
1、修改浏览器窗口大小
webdriver 提供 set_window_size() 方法来修改浏览器窗口的大小
maximize_window() 方法可以实现全屏显示
2、浏览器前进&后退
webdriver 提供 forward() 和 back() 方法来实现页面前进和后退
3、浏览器刷新
driver.refresh()4、浏览器窗口切换
driver.switch_to.window(window[-1])
五、常见操作
webdriver中的常见操作有:
send_keys() 模拟输入指定内容
clear() 清除文本内容
is_displayed() 判断该元素是否可见
get_attribute() 获取标签属性值
size 返回元素的的尺寸
text 返回元素文本
六、鼠标控制
在webdriver中,鼠标操作被封装在ActionChains类中
click() 左单击
context_click() 右单击
double_click() 双击
drag_and_drop() 拖动
move_to_element() 鼠标悬停
perform() 执行所有ActionChains中存储的动作
七、键盘控制
webdriver中keys类几乎提供了键盘上所有的按键方法,可以用send_keys+keys 实现输出键盘上都得组合按键如“Ctrl + C”
八、设置元素等待
webdriver中的等待分为 显式等待 & 隐式等待
显示等待
WebDriverWait( driver, timeout, poll_frequency, ignored_exceptions )
driver:浏览器驱动
timeout:超出时间,单位秒
poll_frequency:每次检测的间隔时间
ignored_exceptions:指定忽略的异常,如果调用until或者until_not的过程中抛出指定忽略的异常,则不中断代码
隐式等待
implicitly_wait()
强制等待
time.sleep() 设置固定的休眠时间,对于代码的运行效率会有影响
九、表单切换
很多页面也会用带frame/iframe表单嵌套,对于这种内嵌的页面selenium是无法直接定位的,需要使用 switch_to.frame() 方法将当前的对象切换成 frame/iframe 内嵌的页面
十、弹窗处理
alert()、confirm()、prompt()
处理方式:先定位(switch_to.alert 自动获取当前弹窗),再使用text、accept、dismiss、send_keys等方法进行操作
text 获取弹窗文案
accept 确认
dismiss 取消
send_keys 发送文本至警告框
十一、上传 & 下载
1、上传
常见的web页面的上传,一般使用 input 或者 (JavaScript、Ajax),对于 input 可以直接使用send_keys( url ) 来上传
2、下载
Chrome浏览器下载文件,需要通过add_experimental_option 添加 prefs 参数。
download.default_directory: 设置下载路径
profile.default_content_settings.popups: 0 禁止弹出窗口
十二、cookies操作
cookie 是识别用户登录与否的关键,爬虫中常用selenium + request 实现cookie持久化,即先用selenium模拟登录获取cookie,在通过request携带cookie进行请求。
webdriver 提供 cookie 的几种操作:读取、添加、删除。
get_cookies:以字典的形式返回当前会话中可见的cookie信息。
get_cookie(name):返回cookie字典中 key == name 的 cookie 信息。
add_cookie(cookie_dict):将cookie添加到当前会话中
delete_cookie(name):删除指定的名称的单个cookie
delete_all_cookies():删除会话内的所有cookie
十三、调用JavaScript
webdriver对于滚动条的处理需要用到JavaScript,同时也可以想textarea文本框输入文本(webdriver只能定位,不能输入文本),webdriver中使用execute_script方法实现JavaScript的执行
js ="window.scrollTo(0,5000);"
driver.extcute_script( js )
十四、其他操作
1、关闭所有页面
driver.quit()
2、关闭当前页面
driver.close()
3、对当前页面截图
webdriver 中使用 get_screenshot_as_file() 对当前页面进行截图,对页面截图这一功能,主要用再测试时记录报错页面的,可以将try except结合 get_screenshot_as_file()一起使用
十五、常用的方法总结
# 获取当前页面 URL
driver.current_url
# 获取当前 html源码
driver.page_source
# 获取当前页面标题
driver.title
# 获取浏览器名称
dirver.name
# 对页面进行截图,返回二进制数据
driver.get_screenshot_as_png()
# 设置浏览器尺寸
driver.get_window_size()
# 获取浏览器尺寸,位置
driver.get_window_rect()
# 获取浏览器位置(左上角)
driver.get_window_position()
# 设置浏览器尺寸
driver.set_window_size(width=1000,height=600)
# 设置浏览器位置(左上角)
driver.set_window_postion(x=5000,y=600)
# 设置浏览器尺寸,位置
driver.get_window_rect(x=200, y=400, width=1000, height=600)
版权归原作者 想成为工程师的菜鸟 所有, 如有侵权,请联系我们删除。