小能豆

如何使用 Selenium 和 Python 根据用户输入查找元素?

py

HTML 结构如下:

<div class='list'>
  <div>
    <p class='code'>12345</p>
    <p class='name'>abc</p>
  </div>
  <div>
    <p class='code'>23456</p>
    <p class='name'>bcd</p>
  </div>
</div>

还有一个 config.py 供用户输入。如果用户在 config.code 中输入 23456,selenium python 如何选择第二个对象?我正在使用它find_by_css_selector()来定位和选择对象,但它只能选择第一个对象,即Code=‘12345’。我试过使用find_by_link_text(),但它是一个<p>元素而不是<a>元素。


阅读 14

收藏
2024-12-09

共1个答案

小能豆

在使用 Selenium 和 find_element_by_css_selector() 定位元素时,遇到的问题是你只选择了第一个匹配的元素。为了选择第二个 <div> 元素,你需要进行更细致的 CSS 选择器选择。下面是你可以用来根据 code(例如,23456)选择第二个 <div> 元素的步骤。

问题分析:

  • find_element_by_css_selector() 默认选择匹配的第一个元素,因此需要用其他方法定位第二个匹配项。
  • code 存在于 <p class='code'> 标签内,而 name 存在于 <p class='name'> 标签内。通过选择 code,可以获取到包含相应 code 的父 <div>

解决方案:

  1. 根据 code 值选择对应的 <p> 元素
    使用 find_element_by_css_selector()find_elements_by_css_selector() 来选择特定的 code 元素,然后再获取它的父 <div> 元素。

  2. 定位第二个符合条件的 <div> 元素
    你可以用 find_elements_by_css_selector() 来获取所有匹配的元素,然后根据索引选择第二个符合条件的元素。

示例代码:

from selenium import webdriver
from selenium.webdriver.common.by import By

# 设置驱动
driver = webdriver.Chrome()

# 假设你已经打开了目标网页
driver.get('your_webpage_url')

# 获取所有匹配 `p.code` 的元素
codes = driver.find_elements(By.CSS_SELECTOR, 'p.code')

# 遍历所有 `code` 元素,查找匹配的 code 值
for code_element in codes:
    if code_element.text == '23456':  # 通过 `code` 的文本进行匹配
        # 获取该 `code` 元素所在的父级 `<div>`
        parent_div = code_element.find_element(By.XPATH, './..')
        # 此时 `parent_div` 就是包含 `code=23456` 的 `<div>`
        print("找到匹配的 <div> 元素")
        break  # 找到后退出循环

解释:

  1. driver.find_elements(By.CSS_SELECTOR, 'p.code'):这将返回页面上所有的 <p class='code'> 元素。
  2. code_element.text == '23456':通过检查每个 code 元素的文本内容来确定是否匹配。
  3. code_element.find_element(By.XPATH, './..'):一旦找到了匹配的 code 元素,我们使用 ./.. XPath 表达式查找其父 <div> 元素。

另一个方法:选择所有 <div> 元素并根据索引选择第二个

# 获取所有的 <div> 元素
divs = driver.find_elements(By.CSS_SELECTOR, 'div')

# 选择第二个 <div> 元素
second_div = divs[1]  # 注意索引是从0开始的

但这种方法假设页面上的所有 <div> 元素都符合条件,通常不太精确,因此建议还是通过 p.code 元素来精确查找。

总结:

  • 使用 find_elements 来查找所有匹配的元素,再通过文本匹配选择正确的元素。
  • 如果页面元素比较复杂或层次较深,使用 XPath 是一个好选择。

通过这些方法,你就可以准确地选择到第二个 code=23456<div> 元素了。

2024-12-09