使用Selenium的python应用程序失败,出现MaxRetryError

m1m5dgzv  于 2022-11-21  发布在  Python
关注(0)|答案(3)|浏览(207)

我正在尝试在Docker中托管一个python应用程序
我正在Docker中运行Selenium独立Chrome,我可以连接到它,在本地运行我的Python应用程序。
我的应用程序如下所示:

def web_scrape():
url = "https://who.maps.arcgis.com/apps/opsdashboard/index.html#/ead3c6475654481ca51c248d52ab9c61"
#setup webdriver
options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox')
options.add_argument('--headless')
options.add_argument('--disable-dev-shm-usage')
options.add_argument("--remote-debugging-port=9222")
driver = webdriver.Remote(command_executor="http://localhost:4444/wd/hub",                            desired_capabilities=options.to_capabilities())
driver.get(url)
time.sleep(20)
html = driver.execute_script("return document.documentElement.outerHTML")
#Use BeautifulSoup for working with html
soup = BeautifulSoup(html, "html.parser")
covid_soup = soup.find("div", id="ember44").div.nav.find_all("span", class_="flex-horizontal")
covid_dict = {}
for i in covid_soup:
    country = i.find("strong").get_text(strip=True)
    country = clean_country_name(country)
    imgURL = i.p.find_next("p").find_next("p").find("img").get('src') 
    color = get_covid_color(imgURL)
    covid_dict[country] = color
save_to_json(covid_dict)

urllib3.exceptions.MaxRetryError:HTTP连接池(主机=“本地主机”,端口=4444):URL超过最大重试次数:/wd/hub/session(由新连接错误(“连接对象位于0x 7 f44 c2 ac 6c 40”)导致:无法建立新连接:[Errno 111]连接被拒绝“))
有没有人对可能出问题的地方有什么建议?

r3i60tvu

r3i60tvu1#

您是如何在docker中设置测试环境的,另外,您还可以在command_executor参数处将localhost替换为selenium-hub

kuuvgm7e

kuuvgm7e2#

有同样的问题。从Docker容器运行的测试无法使用Docker容器中运行的Selenium驱动Chrome。
问题是当测试开始运行时,Selenium服务器不可用(当浏览器容器已启动时)。
在运行实际测试之前尝试调用下面的函数。它将确保服务器可用。

def test_selenium_server_available():
    import requests
    from requests.adapters import HTTPAdapter
    from requests.packages.urllib3.util.retry import Retry

    session = requests.Session()
    retry = Retry(connect=5, backoff_factor=0.5)
    adapter = HTTPAdapter(max_retries=retry)
    session.mount('http://', adapter)
    session.mount('https://', adapter)

    session.get("http://localhost:4444/wd/hub")
nwsw7zdq

nwsw7zdq3#

检查独立浏览器日志我发现我正确网址是http://172.17.0.4:4444/wd/hub而不是localhost或127.0.0.1

相关问题