我尝试编写一个简单的脚本,该脚本每小时检查一次网站,并在发现可用时给我发一封电子邮件。
我认为每小时都这样做不会引发任何问题,但我得到了以下错误:
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
我是一个初学者,所以任何帮助都将不胜感激。
此错误消息。。。
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浏览器会话。
根本原因
此错误的根本原因可能是以下原因之一:
- 如果您手动关闭浏览上下文,而驱动程序已经启动了一个或多个元素的查找,则可能会出现此错误
- 如果您已经调用了
driver.close()
或driver.quit()
,就调用了任何WebDriver方法 - 还有一种可能性是,您试图访问的应用程序正在限制来自您的系统/机器/ip地址/网络的请求
- 该应用程序已将Selenium驱动的ChromeDriver启动的谷歌chrome浏览上下文识别为机器人程序,并拒绝任何访问
解决方案
确保:
- 总是调用
tearDown(){}
方法中的driver.quit()
来关闭&优雅地销毁WebDriver和Web客户端实例 - 诱导WebDriverWait将快速移动的WebDriver与浏览上下文同步
- Selenium已升级到当前发布的3.141.59版本
- ChromeDriver更新到当前ChromeDriver v84.0级别
- Chrome更新到当前Chrome 84.0版本。(根据ChromeDriver v84.0发布说明(
- 如果您的基本Web客户端版本太旧,请将其卸载并安装最新的GA和发布的Web客户端版本
- 通过IDE清理您的项目工作区,并仅使用所需的依赖项重建项目
参考
您可以在中找到一些相关的详细讨论
- 最大重试次数错误:HTTPConnectionPool:超过最大重试次数(由ProtocolError引起("连接中止",错误(111,"连接被拒绝"((
- urllib3.exceptions.MaxRetryError:HTTPConnectionPool(主机="1270.0.1",端口=49951(:Selenium和Python的url超过了最大重试次数
您只需要将此行移动到get_stock((函数的开头
driver = webdriver.Chrome(options=chrome_options, executable_path=PATH)
可能为时已晚,但可能会派上用场