Python selenium 使用 xpath 和 for 循环提取元素

2023-12-01

我正在使用 Python/Selenium 从网站中提取一些文本,以便在 Google 表格中进一步对其进行排序。

我需要提取 15 个标题的文本。该文本位于标签 h5 中的每个标题下。

这是标题的一段摘录:

<tr class="dayHeader">
 <td colspan="7" style="padding:10px 0;">
  <hr>
  <h5>&nbsp;&nbsp;Tuesday - 02 February 2021</h5>
 </td>
</tr>

我所做的如下:

headers = driver.find_elements_by_tag_name('h5')
results = []

for header in headers:
    result = header.text
    results.append(result)

我更喜欢通过此标签上方的类从 h5 获取文本,如下所示:

headers = driver.find_element(By.XPATH,"//tr[@class='dayHeader']/h5")

并将其添加到提到的 for 循环中,但我似乎无法让这条线工作。我怎样才能做到这一点?


你就快到了。/ in xpath表示第一个孩子。但是<h5>不是第一个孩子//tr[@class='dayHeader'].


Solution

您需要替换单个正斜杠,即/带有双正斜杠,即//这将表明一个后代。所以你的有效代码行将是:

print([my_elem.text for my_elem in driver.find_elements(By.XPATH, "//tr[@class='dayHeader']//h5")])

理想情况下你需要诱导WebDriver等待 for visibility_of_all_elements_located()你可以使用以下内容定位策略:

print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//tr[@class='dayHeader']//h5")))])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python selenium 使用 xpath 和 for 循环提取元素 的相关文章

随机推荐