Selenium 简介
Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。
一般我们用在自动化测试中,测试浏览器兼容性、回归测试、自动化演示等功能。也有爬虫程序会用到 Selenium 模拟浏览器操作,绕过浏览器限制,完成爬虫任务。
常见用法
1. 浏览器选择
市面上大大小小的浏览器都支持,只需对应的网站下载对应版本的驱动即可。
webdriver.Firefox
webdriver.FirefoxProfile
webdriver.Chrome
webdriver.ChromeOptions
webdriver.Ie
webdriver.Opera
webdriver.Phantomjs
webdriver.Remote
webdriver.DesiredCapabilities
webdriver.ActionChains
webdriver.TouchActions
webdriver.Proxy
复制代码
下面演示的均为本地安装 Chrome Driver
from selenium import webdriver
# 如果环境变量中没有对应的驱动,需要指定驱动的位置
driver = webdriver.Chrome(executable_path="./chromedriver")
复制代码
2. 页面操作
# 打开指定 URL
driver.get("https://juejin.cn/")
# 刷新页面
driver.refresh()
# 获取页面 title
driver.title # Django REST framework 完结
# 获取当前页面 handler
driver.current_window_handle # CDwindow-0D939ADC119E1268DB3179FC5EFE0818
# 切换页面 参数为对应窗口 handle
driver.switch_to.window('CDwindow-52F96D9038F071C723A12B4DF1F6FBC9')
# 当前页面地址
driver.current_url
# 获取页面 cookie
driver.get_cookies()
# 设置 cookie
driver.add_cookie({ "foo": "bar"})
# 退出页面
driver.close()
复制代码
3. 定位元素
有多种选择器可以定位元素
class By(object):
"""
Set of supported locator strategies.
"""
# id 选择器
ID = "id"
# xpath 选择器
XPATH = "xpath"
# 链接文本选择器
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
# css 选择器
CSS_SELECTOR = "css selector"
复制代码
快速获取页面元素不同选择器参数(谷歌浏览器可快速生成选择器参数)
# XPATH
ipt = driver.find_element(By.XPATH, '//input[@type="search"]')
# CSS_SELECTOR
ipt = driver.find_element(By.CSS_SELECTOR, '#juejin > div.view-container.container > div > header > div > nav > ul > li.search-add > ul > li.nav-item.search > form > input')
复制代码
4. 元素操作
在定位到页面元素之后就可以获取元素对应的属性,以及操作对应节点
ipt = driver.find_element(By.XPATH, '//input[@type="search"]')
# input 输入框输入数据
ipt.send_keys("Django REST framework 完结")
# 获取节点的属性值
ipt.get_attribute("value") # Django REST framework 完结
# input 搜索
ipt.send_keys(Keys.ENTER)
# 提交数据
ipt.submit()
复制代码
4. 执行动作
mark = driver.find_element(By.XPATH, f'//mark[text()="Django REST framework 完结"]')
# 行为链 移动到定位的元素 -> 点击此元素
ActionChains(driver).move_to_element(mark).click().perform()
复制代码
其他常见页面操作
click_and_hold
点击元素并保持context_click
点击元素对应文本double_click
双击元素drag_and_drop
按住元素并拖拽到目标元素release
释放元素click
点击元素move_by_offset
根据给定参数移动元素
上述操作于浏览器内鼠标操作保持一致,支持多个操作组合使用
# 下述操作过程为 找到页面div元素 -> 鼠标点按元素并保持 -> 鼠标拖拽元素向右移动10个像素 -> 松开鼠标
div = driver.find_element(By.XPATH, '//div')
ActionChains(driver).click_and_hold(div).perform()
ActionChains(driver).move_by_offset(xoffset=10, yoffset=0).perform()
ActionChains(driver).release(on_element=div).perform()
复制代码
5. 键盘特殊按键
以下列举常用键输入方式
ipt = driver.find_element(By.XPATH, '//input[@type="search"]')
# 退位键
ipt.send_keys(Keys.BACK_SPACE)
# 空格键
ipt.send_keys(Keys.SPACE)
# CONTROL + A (全选)
ipt.send_keys(Keys.CONTROL, 'a')
# CONTROL + C (复制)
ipt.send_keys(Keys.CONTROL, 'c')
# CONTROL + V (粘贴)
ipt.send_keys(Keys.CONTROL, 'v')
# 回车键
ipt.send_keys(Keys.ENTER)
复制代码
注意事项
下载的 Chromedriver 的版本需要与你电脑上安装的 Chrome版本一致。
例如:我 Mac 电脑版本为 版本 91.0.4472.114(正式版本) (x86_64)
那么对应下载的 Chromedriver 为:
选择其他浏览器驱动时应该注意驱动版本,最好在下载完成后,测试能否本地直接打开浏览器。
近期评论