Selenium Python:普查ACS数据无法在wind中选择下载按钮

2024-05-16 00:42:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图在人口普查网站上搜寻ACS的数据。我已经用Selenium编写了整个过程的脚本,除了最后一次点击。我在用Python。我需要点击一个下载按钮,在一个窗口,弹出的数据时,压缩和准备,但我似乎不能确定这个按钮。似乎按钮可能会根据上次运行的时间更改名称,例如,yui-gen2、yui-gen3等等,所以我想我可能需要为这个人说明一下。虽然我通常只看到yui-gen2。你知道吗

此外,标签似乎在一个“跨度”,这可能会增加我的困难磨练在按钮上我需要点击。你知道吗

如果你能帮我解释一下,请帮忙。你知道吗

代码段: #优化搜索结果以获取表

driver.find_element_by_id("prodautocomplete").send_keys("S0101")
time.sleep(2)
driver.find_element_by_id("prodsubmit").click()
driver.implicitly_wait(100)
time.sleep(2)
driver.find_element_by_id("check_all_btn_above").click()
driver.implicitly_wait(100)
time.sleep(2)
driver.find_element_by_id("dnld_btn_above").click()
driver.implicitly_wait(100)
driver.find_element_by_id("yui-gen0-button").click()
time.sleep(10)
driver.implicitly_wait(100)
driver.find_element_by_id("yui-gen2-button").click()

enter image description here

enter image description here


Tags: 数据idbytimedriversleepelementfind
3条回答

您可以使用Nogoseke提到的XPath或CSS选择器,而不是使用元素id(正如您所指出的,元素id各不相同)。注意不要使XPath/选择器过于具体或依赖于不断变化的值,在本例中是元素id。不要在XPath中使用id,而要尝试用DOM结构(标记)来表示XPath:

//*/div/div/div/span/span/span/button[contains(text(),'Download')]

直到您可以使用search函数而不是在Selenium中运行它来验证XPath。我右键单击网页“inspect element”,ctrl+f,然后输入上面的XPath来验证它是下载按钮。你知道吗

对于后人来说,如果上面的XPath太具体了,也就是说,它依赖于太多级别的DOM结构,那么可以做一些更短的事情,比如

//*button[contains(text(),'Download')]

虽然,这可能不够具体,可能需要一个额外的字段,因为页面上可能有多个带有“下载”文本的按钮。你知道吗

考虑到您提供的HTML,您应该能够使用

driver.find_element_by_id("yui-gen2-button")

我知道你说你试过了,但是你没有说它是否有效或者你收到了什么错误信息。如果这不起作用,您可能需要切换到IFRAME。你知道吗

如果它有时工作,但不一贯由于改变ID,你可以使用类似的东西

driver.find_element_by_xpath("//button[.='Download']")

在Chrome上的代码检查视图中,您可以右键单击要查找的项并复制xpath。您可以通过Selenium上的xpath找到您的元素。你知道吗

相关问题 更多 >