gpt4 book ai didi

python - 无法从网站收集链接(Python)

转载 作者:行者123 更新时间:2023-12-01 08:51:29 26 4
gpt4 key购买 nike

我正在用 Python 编写一个程序来收集网站的链接。代码是:

links = driver.find_elements_by_xpath('//*[@href]')
for link in links:
print(link.get_attribute('href'))
time.sleep(1)

我在一些网站上尝试过,效果很好。问题是当我在特定网站(www.ifood.com.br)中使用时。它收集一些链接,然后返回一些错误。我是Python初学者,所以我不知道他们的意思。拜托,我需要一些帮助。

代码的结果:

https://d1jgln4w9al398.cloudfront.net/imagens/ce/wl/www.ifood.com.br/favicon.ico https://d1jgln4w9al398.cloudfront.net/site/2.1.238-20181023.22/css/main.css https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800 https://www.ifood.com.br/

Traceback (most recent call last): File "C:\Users\jorda\Desktop\Python - Projetos\digitar ifood.py", line 32, in print(link.get_attribute('href')) File "C:\Users\jorda\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 143, in get_attribute resp = self._execute(Command.GET_ELEMENT_ATTRIBUTE, {'name': name}) File "C:\Users\jorda\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute return self._parent.execute(command, params) File "C:\Users\jorda\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute self.error_handler.check_response(response) File "C:\Users\jorda\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document (Session info: chrome=70.0.3538.77) (Driver info: chromedriver=2.42.591088 (7b2b2dca23cca0862f674758c9a3933e685c27d5),platform=Windows NT 10.0.17134 x86_64)

最佳答案

在错误日志中您可以看到

selenium.common.exceptions.StaleElementReferenceException:消息:过时的元素引用:元素未附加到页面文档

通常,当您尝试与 DOM 中不再存在的 Web 元素交互时,就会发生这种情况。一个典型的场景可以描述为

  1. 您打开了一个网页。
  2. 查找一些元素并将它们保存到变量中。
  3. 页面 DOM 已更改(例如重新加载)。
  4. 您仍然看到相同的页面,但从 selenium 的角度来看,第 2 步中的元素已经过时。

因此,在您的情况下,您可以在调用 .findElements 之前尝试确保页面已完全加载(即不恢复 DOM)。检查这是否能解决您的问题的最简单方法是在调用 .findElements 之前添加 sleep 。

time.sleep(5)
links = driver.find_elements_by_xpath('//*[@href]')
for link in links:
print(link.get_attribute('href'))

请注意,不建议使用 sleep。因为例如,如果 5 秒有效,目前无法保证在某个时刻(由于连接不良)它不会破坏您的测试。相反,使用智能等待条件,该条件将重复检查“页面已加载”条件,并仅在发生时才继续。更多详细信息可以在这里找到:Python Selenium stale element fix

关于python - 无法从网站收集链接(Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53085546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com