在自动化测试和 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 的导入、大小写或安装没有问题,则任何错误都可能与不正确的搜索条件有关。