【问题标题】:Click all links of table using Selenium Python使用 Selenium Python 单击表的所有链接
【发布时间】:2021-09-21 10:05:06
【问题描述】:

在我的项目中,我通过单击每个写为“日期”的链接来下载所有报告。下面是表的图像。

我必须提取表格列“付款日期”中提到的每个日期的报告。每个日期都是报告的链接。所以,我一个一个地点击所有的日期来下载报告。

for dt in driver.find_elements_by_xpath('//*[@id="tr-undefined"]/td[1]/span'):
    dt.click()
    time.sleep(random.randint(5, 10))

所以,这里的过程是当我单击一个日期时,它会下载该日期的报告。然后,我将单击下一个日期以获取该日期的报告。因此,我创建了一个 for 循环来遍历所有链接并获取所有日期的报告。

但它给了我陈旧元素例外。单击第一个日期后,无法单击下一个日期。我收到错误并且代码停止。

我该如何解决这个问题?

【问题讨论】:

  • 2 个选项可供尝试。 1) 不要使用 time.sleep 对交易进行硬编码,而是使用 Seleniums 等到可点击或可见(对于example)。 2)看能不能直接通过api请求数据
  • 现在,我想知道当你点击第一次约会时,有没有重定向?因为如果有,我们也需要自动化该部分。
  • @cruisepandey 当我点击第一个日期时,它会下载一份报告并停留在同一页面上。
  • 要解决这个问题,请从这里寻求帮助:stackoverflow.com/questions/18225997/…
  • 要解决这个问题,请从这里寻求帮助:stackoverflow.com/questions/18225997/…

标签: python selenium web-scraping automation


【解决方案1】:

您会遇到过时元素异常,因为 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

【讨论】:

    【解决方案2】:

    最简单的解决方法是每次点击之前获取特定链接。

    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))
    

    【讨论】:

    • 我使用了这个解决方案。但它会返回一个元素列表,这些元素是不可点击的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    相关资源
    最近更新 更多