PythonSelenium使用指南

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"
复制代码

快速获取页面元素不同选择器参数(谷歌浏览器可快速生成选择器参数)

image.png

# 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)

image.png
那么对应下载的 Chromedriver 为:

image.png

选择其他浏览器驱动时应该注意驱动版本,最好在下载完成后,测试能否本地直接打开浏览器。

参考资料