zl程序教程

您现在的位置是:首页 >  Java

当前栏目

selenium 自动化测试

2023-02-18 15:29:12 时间

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)