继续在错误"无法解码来自马里奥内特的响应"后运行Selenium脚本

2024-04-20 03:52:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python脚本,它列出了一长串网站的标题。这需要很长时间,所以脚本必须运行数小时。然而,偶尔,我会得到错误“未能解码来自木偶的响应”

根据我所读到的,这个错误背后的原因似乎并不完全清楚。对于我来说,摆脱它并不是我的首要任务,而是不要在脚本发生时完全停止它,这就是当前出现错误时发生的情况。在

我该怎么做?在

代码如下:

from pyvirtualdisplay import Display
from time import sleep
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.firefox.options import Options
display = Display(visible=0, size(800,600))
display.start()
urlsFile = open ("urls.txt", "r")
urls = urlsFile.readLines()
driver = webdriver.Firefox(executable_path='/usr/local/lib/geckodriver/geckodriver')
driver.set_page_load_timeout(60)
for url in urls:
        try:
           driver.get(url)
           sleep(0.8)
           print(driver.title)
        except TimeoutException as e:
           print("Timeout")

Tags: fromimport脚本driverselenium错误displaysys
1条回答
网友
1楼 · 发布于 2024-04-20 03:52:38

注意:这是我第一次尝试编写Python


您只需要构建一种方法,以便在GET操作失败时重试它。您仍然希望放弃一定次数的重试,但至少这应该捕捉到每个URL的一次性失败。在

def retryable_get(self, url, max_tries = 5)
  attempts = 0
  while attempts < max_tries
    try:
      self.get(url)
    except Exception:
      puts 'An error occured performing a GET to ' + url
    finally:
      attempts += 1
  raise TimeoutException(f'Failed to GET {url} after {max_tries} attempts')

您可以使用以下方法调用它:

^{pr2}$

或者,如果您想要更面向对象的方法,请键入Firefox类:

webdriver.Firefox.retryable_get = retryable_get

for url in urls:
  try:
    driver.retryable_get(url)
    sleep(0.8)
    print(driver.title)
  except TimeoutException as e:
    print("Timeout")

相关问题 更多 >