Selenium Python:人口普查 ACS 数据 - 无法 select 下载 window 中的按钮

Selenium Python: Census ACS Data- unable to select Download button in window

我正在尝试从人口普查网站上抓取 ACS 数据。除了最后一次点击之外,我已经使用 Selenium 编写了整个过程的脚本。我正在使用 Python。我需要单击 window 中的下载按钮,该按钮会在数据压缩并准备就绪时弹出,但我似乎无法识别此按钮。按钮似乎也可能会根据上次 运行 的时间更改名称,例如 yui-gen2、yui-gen3 等,所以我想我可能需要考虑这个人。虽然我通常只看到 yui-gen2。

此外,标签似乎在 "span" 中,这可能会增加我在需要单击的按钮上磨练的难度。

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

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

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

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

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

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

直到您可以使用搜索功能验证您的 XPath,而不是在 Selenium 中 运行 它。我右键单击该网页,"inspect element",ctrl+f,然后输入上面的 XPath 以验证它是下载按钮。

为了后代,如果上面的 XPath 过于具体,即它依赖于 DOM 结构的太多层次,你可以做一些更短的事情,比如

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

不过,这可能不够具体,可能需要一个额外的字段,因为页面上可能有多个带有 'Download' 文本的按钮。

根据您提供的HTML,您应该可以使用

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

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

如果它有时有效但由于更改 ID 而不是始终如一,您可以使用类似

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