我正试图在人口普查网站上搜索ACS数据。我使用Selenium编写了整个过程的脚本,除了最后一次点击。我正在使用Python。我需要单击一个下拉按钮,该按钮位于拉链并准备好数据时弹出的窗口中,但我似乎无法识别此按钮。似乎按钮可能会根据上次运行的时间更改名称,例如yui-gen2,yui-gen3等等,所以我想我可能需要考虑这个人。虽然我通常只看到yui-gen2。
此外,标签似乎处于“跨度”,这可能会增加我在我需要点击的按钮上磨练的难度。
请帮助,如果你能为我阐明这一点。
代码段: #Refine搜索结果以获取表格
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()
答案 0 :(得分:1)
您可以使用XPath作为Nogoseke或CSS Selector,而不是使用您指出的元素ID。注意不要使XPath /选择器过于具体或依赖于更改值,在本例中为元素id。而不是在XPath中使用id,尝试根据DOM结构(标记)表达XPath:
//*/div/div/div/span/span/span/button[contains(text(),'Download')]
TIL您可以使用搜索功能验证XPath,而不是在Selenium中运行它。我右键单击了网页,“检查元素”,ctrl + f,并在上面的XPath中键入以验证它是“下载”按钮。
对于后人来说,如果上面的XPath过于具体,即它依赖于过多的DOM结构,你可以做更短的事情,比如
//*button[contains(text(),'Download')]
虽然,这可能不够具体,可能需要额外的字段,因为页面上可能有多个按钮带有“下载”文本。
答案 1 :(得分:0)
在Chrome上的代码检查视图中,您可以右键单击要查找的项目并复制xpath。你可以在Selenium上通过xpath找到你的元素。
答案 2 :(得分:0)
根据您提供的HTML,您应该可以使用
driver.find_element_by_id("yui-gen2-button")
我知道你说过你尝试了但是你没有说它是否有效或你得到了什么错误信息。如果这不起作用,您可能需要切换到的IFRAME。
如果由于更改ID而有时但不一致,则可以使用
之类的内容driver.find_element_by_xpath("//button[.='Download']")