我正试图在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)
urlib3.exceptions.MaxRetryError:HTTPConnectionPool(host='localhost',port=4444(:url:/wd/hub/session超过了最大重试次数(由NewConnectionError引起('<urlib3.connection.HTTPConnection对象位于0x7f44c2c6c40>:无法建立新连接:[Erno 111]连接被拒绝'(
有人对可能出现的问题有什么建议吗?
您是如何在docker中设置测试环境的,此外,您还可以在command_executor参数中将localhost替换为selenium-hub
也有同样的问题。从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")
从独立浏览器检查日志。我发现我的正确网址是http://172.17.0.4:4444/wd/hub而不是localhost或127.0.0.1