首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何处理urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1',port=58408):最大重试超过url

如何处理urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1',port=58408):最大重试超过url
EN

Stack Overflow用户
提问于 2020-11-09 04:03:59
回答 2查看 25.3K关注 0票数 10

我试着用selenium抓取几个网页并使用结果,但是当我两次运行这个函数时

代码语言:javascript
运行
复制
[WinError 10061] No connection could be made because the target machine actively refused it'

第二个函数调用出现错误。我的方法是:

代码语言:javascript
运行
复制
import os
import re
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup as soup

opts = webdriver.ChromeOptions()
opts.binary_location = os.environ.get('GOOGLE_CHROME_BIN', None)
opts.add_argument("--headless")
opts.add_argument("--disable-dev-shm-usage")
opts.add_argument("--no-sandbox")
browser = webdriver.Chrome(executable_path="CHROME_DRIVER PATH", options=opts)

lst =[]
def search(st):
    for i in range(1,3):
        url = "https://gogoanime.so/anime-list.html?page=" + str(i)
        browser.get(url)
        req = browser.page_source
        sou = soup(req, "html.parser")
        title = sou.find('ul', class_ = "listing")
        title = title.find_all("li")
        for j in range(len(title)):
            lst.append(title[j].getText().lower()[1:])
    browser.quit()
    print(len(lst))
    
search("a")
search("a")

输出

代码语言:javascript
运行
复制
272
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=58408): Max retries exceeded with url: /session/4b3cb270d1b5b867257dcb1cee49b368/url (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x000001D5B378FA60>: Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-09 13:13:14

这个错误信息..。

代码语言:javascript
运行
复制
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=58408): Max retries exceeded with url: /session/4b3cb270d1b5b867257dcb1cee49b368/url (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x000001D5B378FA60>: Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it'))

...implies表示未能建立新连接,从而使MaxRetryError无法建立连接。

几件事:

  • 首先也是最重要的,根据讨论最大重试-超过异常是令人困惑的。,追溯在某种程度上具有误导性。请求封装异常以方便用户使用。原始异常是显示的消息的一部分。
  • 请求从不重试(它为urllib3 3的MaxRetryError设置retries=0HTTPConnectionPool),因此如果没有retries=0HTTPConnectionPool关键字,错误就会更加规范。因此,一个理想的回溯应该是: ConnectionError(

根本原因与解决办法

一旦您启动了webdriver会话,接下来在def search(st)中您将调用get() o access一个url,并在随后的行中调用用于调用/shutdown端点的browser.quit(),并随后调用webdriver & web客户端实例将被完全销毁,关闭所有页面/选项卡/窗口。因此,不再存在连接。

您可以在以下几个方面找到相关的详细讨论:

在这种情况下,在下一次迭代中(由于for循环),当调用browser.get()时,没有活动连接。因此,您可以看到错误。

因此,一个简单的解决方案是删除行browser.quit()并在相同的浏览上下文中调用browser.get(url)

结论

升级到Selenium 3.14.1之后,您将能够设置超时并查看规范的跟踪,并将能够采取所需的操作。

参考文献

您可以在以下网站找到相关的详细讨论:

tl;dr

几次相关的讨论:

票数 9
EN

Stack Overflow用户

发布于 2022-03-18 08:25:18

问题

退出后,驱动程序被要求爬行URL。在获得内容之前,一定要确保没有退出驱动程序。

溶液

对于您的代码,在执行search("a")时,驱动程序检索url,返回内容,然后关闭内容。

serach()再次运行时,驱动程序不再存在,因此它无法继续运行该URL。

您需要从函数中删除browser.quit()并在脚本末尾添加它。

代码语言:javascript
运行
复制
lst =[]
def search(st):
    for i in range(1,3):
        url = "https://gogoanime.so/anime-list.html?page=" + str(i)
        browser.get(url)
        req = browser.page_source
        sou = soup(req, "html.parser")
        title = sou.find('ul', class_ = "listing")
        title = title.find_all("li")
        for j in range(len(title)):
            lst.append(title[j].getText().lower()[1:])
    print(len(lst))
    
search("a")
search("a")
browser.quit()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64745726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档