在Python中使用xpath和selenium选择HTML元素

问题描述 投票:0回答:2

感谢您让我在这里提出问题。我是 Selenium 和 XPath 的新手,只是想使用 Python 抓取一个不太简单的网站。

我的问题是:

  1. 您对我关于如何选择相关 HTML 元素的具体问题有答案吗?
  2. 我下面列出的学习资源还有什么补充吗(这看起来很有帮助,但我似乎还不够先进,无法将它们应用到我的情况中)?

具体问题:我有一个如下所示的HTML文件,想要提取'data-testid =“qs-select-make”'元素(最后,我想使用selenium来更新下拉菜单)

在我的一生中,我无法让它发挥作用......

<div class = "a">
<div class = "ab">
<div class = "abc">
<div class = "abcd">
<select class="tya6p HaBLt A4yQa q0MnL" placeholder="Any" data-testid="qs-select- 
make"><option selected="" value="">Any</option>

使用谷歌浏览器网络开发人员我已经找到了“正确的”(尽管不是很好的路径)似乎是

[@id="root"]/div/div/article[1]/section/div/div[2]/div[1]/div[1]/div/select

仍然,以下代码尝试将品牌“Audi”插入下拉菜单,但失败并出现无效选择器异常:

make_string = "//select[//* 
[@id='root"]/div/div/article[1]/section/div/div[2]/div[1]/div[1]/div/select]option 
selected[text()='{}']".format("Audi") 

driver.find_element("xpath", make_string).click() #use selenium to click the button

有谁知道我做错了什么,以及更好的方法吗?

关于问题2,资源。到目前为止我用过:

  • Stackoverflow,一如既往的有帮助,特别是这个问题
  • 一篇非常有用的 testigma 博客文章,它向我指出了 chrome 浏览器 Web 开发人员至少的路径:这里
  • Selenium 文档 - 写得非常好,但由于我是初学者,我还无法将一般概念应用于我的具体问题......抱歉:这里
python selenium-webdriver xpath selenium-chromedriver
2个回答
0
投票

使用下面的

xpath
来识别元素。请同时添加
syncronisation
时间。

driver.find_element("xpath", "//select[@data-testid='qs-select-make']//option[text()='{}']".format("Audi")).click()

0
投票

您的 XPath 表达式存在语法错误,使其成为无效选择器。要选择带有 data-testid="qs-select-make" 的 select 元素,您可以使用更干净、更直接的 XPath 表达式。正确的做法是这样的:

make_selector = "//select[@data-testid='qs-select-make']"

driver.find_element_by_xpath(make_selector).click()

option_xpath = f"{make_selector}/option[text()='Audi']"
driver.find_element_by_xpath(option_xpath).click()

此代码首先通过其 data-testid 属性选择下拉列表,然后单击它展开选项,最后从展开的下拉列表中选择“Audi”选项。

© www.soinside.com 2019 - 2024. All rights reserved.