Python+Selenium配置及元素定位

Python+Selenium的Windows配置

安装python

  1. python下载地址: https://www.python.org
  2. python环境变量:
    通过电脑->属性->高级系统设置->环境变量添加至Path环境变量 (不同路径之间是分号)
    D:\software\python3.6.2
    D:\software\python3.6.2\Scripts
    或cmd: path=%path%;D:\software\python3.6.2
    path=%path%;D:\software\python3.6.2\Scripts
  3. 测试python是否安装成功:
    cmd: python

安装selenium

cmd: pip install selenium==3.7.0 (==指定安装版本)
pip uninstall selenium (卸载安装的包)

安装浏览器驱动

  1. chrome驱动下载地址: http://chromedriver.storage.googleapis.com/index.html
  2. 将chromedriver放到D:\software\python3.6.2\Scripts下
  3. 将chrome所在位置添加至环境变量
  4. 测试能否打开网页:
    1
    2
    3
    4
    5
    6
    from selenium import webdriver
    option = webdriver.ChromeOptions()
    option.add_argument('headless') #不显示浏览器窗口
    browser = webdriver.Chrome(chrome_options=option)
    browser.get(url) #打开网页
    browser.quit() #关闭浏览器
    浏览器驱动,浏览器版本和selenium版本要对应

元素定位

基本元素定位方法

  • 通过id定位: find_element_by_id()
  • 通过类名定位: find_element_by_class_name()
  • 通过标签名定位: find_element_by_tag_name()
  • 通过name定位: find_element_by_name()
  • 通过文本定位: find_element_by_link_text()
  • 通过部分文本定位: find_element_by_partial_link_text()
  • 通过路径定位: find_element_by_xpath()
  • 通过css定位: find_element_by_css_selector()

基本元素定位方法的复数形式

  • 将find_element_by_x()变为find_elements_by_x()
  • find_element只能定位到匹配的第一个元素,find_elements能定位匹配的所有元素并返回一个列表,可以通过列表下标选择需要定位的元素

js定位方法

  • 通过id定位: document.getElementById()
  • 通过标签名定位: document.getElementByTagName()
  • 通过类名定位: document.getElementByClassName()
  • 通过name定位: document.getElementByName()
  • 其复数形式也是将Element变为Elements

xpath定位

  • 属性定位 (@后接属性): find_element_by_xpath('//*[@id="x"]')
  • 文本定位 (text): find_element_by_xpath('//*[text()="x"]')
  • 相对路径定位 (//表示相对路径): find_element_by_xpath('//*[@id="x"]//tr[2]')
  • 绝对路径定位: find_element_by_xpath('//*[@id="x"]/div/table/tbody/tr[2]')
  • 父节点定位子节点 (child): find_element_by_xpath('//*[@id="x"]/child::div')
  • 子节点定位父节点 (parent):
    find_element_by_xpath('//*[@id="x"]/../..')
    find_element_by_xpath('//*[@id="x"]/parent::*/parent::div')
  • 兄节点定位弟节点 (following-sibling): find_element_by_xpath('//*[@id="x"]/following-sibling::div')
  • 弟节点定位兄节点 (preceding-sibling): find_element_by_xpath('//*[@id="x"]/preceding-sibling::div')
  • 组合定位 (and): find_element_by_xpath('//div[@id="x" and @name="x"]')
  • 模糊匹配定位 (contains,starts-with):
    find_element_by_xpath('//*[contains(@id,"x")]') (*表示全部标签,包含)
    find_element_by_xpath('//*[starts-with(@id,"x")]') (以什么开头)
    find_element_by_xpath('//*[contains(text(),"x")]')
    find_element_by_xpath('//*[starts-with(text(),"x")]')

其他元素定位方法

  • 层级定位: find_element_by_id("table").find_elements_by_tag_name('tr')
  • 执行js脚本修改属性以定位: execute_script("document.getElementById("x").style.display='block';")

定位元素的鼠标事件

  • 单击: click()
  • 鼠标移到某元素: ActionChains(driver).move_to_element(c).perform()

获取定位元素的信息

  • 获取文本: .text
  • 获取属性值: .get_attribute('href')
Author: Giftbear
Link: https://giftbear.github.io/2022/01/27/Python+Selenium配置及元素定位/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.