在自动化测试和 Web 抓取方面,Selenium 已成为 Web 开发人员和测试人员的强大工具。Selenium 提供了一套全面的功能,允许用户以编程方式与 Web 浏览器进行交互。
了解selenium.webdriver.common.by.By:
“selenium.webdriver.common.by.By”模块提供了一组用于识别网页元素的定位器策略。它是 Selenium WebDriver 包的一部分,使用户能够与各种 Web 元素(如按钮、文本字段、下拉列表等)进行交互。
定位器策略:
“selenium.webdriver.common.by”模块中的 “By” 类不仅仅是一个模块,而是 Python 中的枚举 (enum)。枚举是命名值的集合,通常称为成员或枚举器。对于 “By” 枚举,它由各种定位器策略组成,每种策略都旨在根据不同的属性定位元素。
通过使用 “By” 枚举,您可以访问一组预定义的定位器策略,从而更容易指定用于识别 Web 元素的搜索条件。这些定位器策略使您能够根据元素的属性(如 ID、类名、CSS 选择器、XPath、标签名称、链接文本或部分链接文本)与元素进行交互。
示例 1:按 ID 查找元素:
根据元素的唯一标识符(id 属性)查找元素。
from selenium.webdriver.common.by import By
element = driver.find_element(By.ID, 'element_id')
示例 2:按类名查找元素:
类名:使用元素的 CSS 类名查找元素。
from selenium.webdriver.common.by import By
element = driver.find_element(By.CLASS_NAME, 'class_name')
示例 3:按标签名称查找元素:
按元素的 HTML 标签名称标识元素。
from selenium.webdriver.common.by import By
element = driver.find_element(By.TAG_NAME, 'tag_name')
示例 4:按链接文本或部分链接文本定位元素:
根据超链接的精确或部分可见文本查找超链接。
from selenium.webdriver.common.by import By
link = driver.find_element(By.LINK_TEXT, 'Click here')
partial_link = driver.find_element(By.PARTIAL_LINK_TEXT, 'here')
示例 5:使用 XPath 表达式查找元素:
使用 XPath 表达式根据元素在文档中的路径来查找元素。
from selenium.webdriver.common.by import By
element = driver.find_element(By.XPATH, '//input[@id="email"]')
示例 6:使用 CSS 选择器查找元素:
使用 CSS 选择器根据元素在文档中的路径来查找元素。这些表达式与 XPath 表达式非常相似,但通常功能较弱,但代价是更易于使用和学习。
from selenium.webdriver.common.by import By
element = driver.find_element(By.CSS_SELECTOR, "div.myClass")
示例 7:使用 Name 属性查找元素
根据 HTML 元素的 “name” 属性查找 HTML 元素。
element = driver.find_element(By.NAME, 'element_name')
常见错误
在使用 Module 时,程序员可能会遇到一些常见的错误和陷阱。
忘记导入 By
模块:
一个常见的错误是忽略了导入By
模块。确保在脚本的开头具有以下 import 语句:
from selenium.webdriver.common.by import By
大小写问题:
By
模块的方法(如By.ID
或 By.CSS_SELECTOR
)区分大小写。请确保使用正确的大小写以避免属性错误。
from selenium.webdriver.common.by import by # Wrong
from selenium.webdriver.common.by import By # Right
element = driver.find_element(By.Css_selector, "div") # Wrong
element = driver.find_element(by.CSS_SELECTOR, "div") # Wrong
element = driver.find_element(By.CSS_SELECTOR, "div") # Right
不正确的搜索条件:
使用By
模块的方法时,提供正确的搜索条件至关重要。否则可能会导致 NoSuchElementException 或元素标识不正确。
如果 selenium 的导入、大小写或安装没有问题,则任何错误都可能与不正确的搜索条件有关。