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>元素。
find_by_css_selector()
find_by_link_text()
<p>
<a>
在使用 Selenium 和 find_element_by_css_selector() 定位元素时,遇到的问题是你只选择了第一个匹配的元素。为了选择第二个 <div> 元素,你需要进行更细致的 CSS 选择器选择。下面是你可以用来根据 code(例如,23456)选择第二个 <div> 元素的步骤。
find_element_by_css_selector()
<div>
code
23456
<p class='code'>
name
<p class='name'>
根据 code 值选择对应的 <p> 元素: 使用 find_element_by_css_selector() 或 find_elements_by_css_selector() 来选择特定的 code 元素,然后再获取它的父 <div> 元素。
find_elements_by_css_selector()
定位第二个符合条件的 <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 # 找到后退出循环
driver.find_elements(By.CSS_SELECTOR, 'p.code')
code_element.text == '23456'
code_element.find_element(By.XPATH, './..')
./..
# 获取所有的 <div> 元素 divs = driver.find_elements(By.CSS_SELECTOR, 'div') # 选择第二个 <div> 元素 second_div = divs[1] # 注意索引是从0开始的
但这种方法假设页面上的所有 <div> 元素都符合条件,通常不太精确,因此建议还是通过 p.code 元素来精确查找。
p.code
find_elements
XPath
通过这些方法,你就可以准确地选择到第二个 code=23456 的 <div> 元素了。
code=23456