5

我尝试编写一个简单的脚本,每小时检查一次网站,并在发现可用时向我发送一封电子邮件。

我认为这样做应该不会引发任何问题,但我收到以下错误:

MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=60745): Max retries exceeded with url: /session/900f45d6c8c800f2a8ebcf43daa05b69/url (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fa42c261c10>: Failed to establish a new connection: [Errno 61] Connection refused'))

这是我的代码:

import schedule
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from notification import *
#script i have to send an email (works fine)

PATH = "mypath"
# i have the path where there drivers are

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=1920x1080")
# to not open the browser

driver = webdriver.Chrome(options=chrome_options, executable_path=PATH)

def get_stock():
    driver.get("website i'm trying to check")
    # access the website
    search = driver.find_element_by_name("add")
    # add is the name of the button i wanna check
    result = search.is_enabled()
    print(result)
    driver.quit()


schedule.every().hour.do(get_stock)
# run the get_stock function every hour

c = 0
# initialize the loop

while c == 0:
    schedule.run_pending()
    c = get_stock()
    # set the seed equal to the get_stock so that it stops once it becomes True
    time.sleep(1)
    print(get_stock())


email("Now there's a stock.")
#using my notification script to send the email

我是初学者,所以任何帮助将不胜感激。

4

1 回答 1

6

此错误消息...

MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=60745): Max retries exceeded with url: /session/900f45d6c8c800f2a8ebcf43daa05b69/url (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fa42c261c10>: Failed to establish a new connection: [Errno 61] Connection refused'))

...意味着ChromeDriver无法启动/生成/与浏览上下文(即Chrome 浏览器会话)通信。


根本原因

此错误的根本原因可能是以下任一原因:

  • 如果您在驱动程序已经开始查找元素/元素时手动关闭浏览上下文,则可能会出现此错误。
  • 如果您已经调用过任何WebDriver 方法driver.close(),或者driver.quit().
  • 您尝试访问的应用程序也有可能限制来自您的系统/机器/IP 地址/网络的请求。
  • 该应用程序已将Selenium驱动的ChromeDriver启动 浏览上下文识别为机器人,并拒绝任何访问

解决方案

确保这件事:

  • 始终driver.quit()tearDown(){}方法内调用以优雅地关闭和销毁WebDriverWeb 客户端实例。
  • 诱导WebDriverWait将快速移动的 WebDriver 与Browsing Context同步。
  • Selenium升级到当前发布的版本 3.141.59
  • ChromeDriver已更新到当前的ChromeDriver v84.0级别。
  • Chrome已更新到当前的Chrome 版本 84.0级别。(根据ChromeDriver v84.0 发行说明
  • 如果您的基本Web 客户端版本太旧,请卸载它并安装最新的 GA 和已发布版本的Web 客户端
  • 通过IDE清理项目工作区并仅使用所需的依赖项重建项目。

参考

您可以在以下位置找到一些相关的详细讨论:

于 2020-09-17T20:12:40.707 回答