我必须提取表列“付款日期”中提到的每个日期的报告。每个日期都是报告的链接。所以,我一个接一个地点击所有日期以下载报告。
for dt in driver.find_elements_by_xpath('//*[@id="tr-undefined"]/td[1]/span'):
dt.click()
time.sleep(random.randint(5, 10))
所以,这里的过程是,当我点击一个日期,它将下载该日期的报告。然后,我将单击“下一个日期”以获取该日期的报告。所以,我做了一个for循环来循环所有的链接,并得到所有日期的报告。
但它给了我一个陈旧的元素例外。单击第一个日期后,无法单击下一个日期。我遇到了错误和代码停止。
我该怎么解决这个问题?
解决这个问题最简单的方法是在每次点击之前获得一个特定的链接。
links = driver.find_elements_by_xpath('//*[@id="tr-undefined"]/td[1]/span')
for i in range(len(links)):
element = driver.find_elements_by_xpath('(//*[@id="tr-undefined"]/td[1]/span)[i+1]')
element.click()
time.sleep(random.randint(5, 10))
由于每次单击时DOM都会更新所选内容中的元素,因此会出现陈旧元素异常。
例如:单击时,一个标记“clicked”
被附加到元素的类中。由于您选择的列表包含已更改的元素(第一个元素有一个新类),因此会抛出一个错误。
一个快速而肮脏的解决方案是在每次迭代后重新执行查询。如果值列表随着单击而增加或减少,这一点尤其有用。
# Create an anonymous function to re-use
# This function can contain any selector
get_elements = lambda: driver.find_elements_by_xpath('//*[@id="tr-undefined"]/td[1]/span')
i = 0
while True:
elements = get_elements()
# Exit if you're finished iterating
if not elements or i>len(elements):
break
# This should always work
element[i].click()
# sleep
time.sleep(random.randint(5, 10))
# Update your counter
i+=1
当我运行此代码时,会出现以下错误:- 组织。openqa。硒。StaleElementReferenceException:stale元素引用:元素未附加到页面文档 我也尝试了含蓄的等待,但得到了同样的问题。
问题内容: 我想点击google结果上的第一个结果。这是我输入从csv文件读取的chennai craiglist的代码。因此,我肯定有机结果中的第一个链接将是chennai.craiglist.org。但是我很安静,不确定如何执行此操作。 我想知道这行之后会发生什么? 更新 现在我给像 我不确定它是否会起作用。 问题答案: 在你选择的是“OK”,但可能不是最好的。
问题内容: 我有一个链接而不是“提交”按钮: 单击后可以提交表单吗? 问题答案: 最好的方式 最好的方法是插入适当的输入标签: 最好的JS方式 由封闭后的JavaScript代码事件(只选择了向后兼容性如果你还没有这样做: 简单而不可取的方式(以前的答案) 在链接和表单中添加一个属性: 所有方式 无论选择哪种方式,最终都可以调用(标记的DOM对象在哪里)。 您还必须绑定这样的事件处理程序,该事件处
我在尝试使用Selenium WebDriver单击超链接时遇到了一个问题。我尝试使用CssSelector和XPath,但似乎都不起作用。我想做的就是点击谷歌文本。
问题内容: 在机械化中,我们可以使用follow_link或click_link单击链接。在美丽的汤中是否有类似的事情可以单击网页上的链接? 问题答案: 是HTML 解析器 。 进一步的讨论实际上取决于您所处的具体情况以及特定网页的复杂性。 如果您需要与网页进行交互:提交表单,单击按钮,滚动等-您需要使用利用真实浏览器的工具,例如。 例如,在某些情况下,如果提交表单时不涉及任何javascript
我有一个html链接