BrowserStack 脚本因 MaxRetryError 而失败
BrowserStack script fails with MaxRetryError
脚本来自https://www.browserstack.com/automate/python
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
desired_cap = {
'browser': 'Chrome',
'browser_version': '62.0',
'os': 'Windows',
'os_version': '10',
'resolution': '1024x768',
'name': 'Bstack-[Python] Sample Test'
}
driver = webdriver.Remote(
command_executor='http://servinc1:key@hub.browserstack.com:80/wd/hub',
desired_capabilities=desired_cap)
driver.get("http://www.google.com")
if not "Google" in driver.title:
raise Exception("Unable to load google page!")
elem = driver.find_element_by_name("q")
elem.send_keys("BrowserStack")
elem.submit()
print driver.title
driver.quit()
失败
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='hub.browserstack.com', port=80): Max retries exceeded with url: /wd/hub/session (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused',))
在具有本地主机 HTTP 代理的系统上。代理配置了 {http,https}_proxy
环境变量:使用请求有效:
import requests
r = requests.get('https://api.github.com/events')
并允许连接到 hub.browserstack.com
也有效。
目的是通过本地代理使用 BrowserStack。这是如何解决的?
由于您的 use-case 涉及使用代理将流量发送到 BrowserStack Hub,因此您需要在代码段中指定代理详细信息,如下所示 -
//Set the appropriate proxy environment variable (HTTP_PROXY if it is a HTTP proxy, HTTPS_PROXY if it is a HTTPS proxy, etc.) before running the tests.
//You can set this as follows:
export HTTP_PROXY='http://<proxyhost>:<proxyport>'
您可以在此处阅读更多相关信息- https://www.browserstack.com/automate/python#proxy
所以现在解决方法似乎就是答案:允许所有到 hub.browserstack.com 的连接通过防火墙。例如
iptables -I OUTPUT 1 -p tcp --dport 443 -d hub.browserstack.com -j ACCEPT
在为您的 python selenium 设置安装依赖库时,您可以使用 urllib3==1.24.3,它应该可以工作。
pip install urllib3==1.24.3
注意:此版本的 urllib3 与 selenium 4 不兼容
脚本来自https://www.browserstack.com/automate/python
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
desired_cap = {
'browser': 'Chrome',
'browser_version': '62.0',
'os': 'Windows',
'os_version': '10',
'resolution': '1024x768',
'name': 'Bstack-[Python] Sample Test'
}
driver = webdriver.Remote(
command_executor='http://servinc1:key@hub.browserstack.com:80/wd/hub',
desired_capabilities=desired_cap)
driver.get("http://www.google.com")
if not "Google" in driver.title:
raise Exception("Unable to load google page!")
elem = driver.find_element_by_name("q")
elem.send_keys("BrowserStack")
elem.submit()
print driver.title
driver.quit()
失败
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='hub.browserstack.com', port=80): Max retries exceeded with url: /wd/hub/session (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused',))
在具有本地主机 HTTP 代理的系统上。代理配置了 {http,https}_proxy
环境变量:使用请求有效:
import requests
r = requests.get('https://api.github.com/events')
并允许连接到 hub.browserstack.com
也有效。
目的是通过本地代理使用 BrowserStack。这是如何解决的?
由于您的 use-case 涉及使用代理将流量发送到 BrowserStack Hub,因此您需要在代码段中指定代理详细信息,如下所示 -
//Set the appropriate proxy environment variable (HTTP_PROXY if it is a HTTP proxy, HTTPS_PROXY if it is a HTTPS proxy, etc.) before running the tests.
//You can set this as follows:
export HTTP_PROXY='http://<proxyhost>:<proxyport>'
您可以在此处阅读更多相关信息- https://www.browserstack.com/automate/python#proxy
所以现在解决方法似乎就是答案:允许所有到 hub.browserstack.com 的连接通过防火墙。例如
iptables -I OUTPUT 1 -p tcp --dport 443 -d hub.browserstack.com -j ACCEPT
在为您的 python selenium 设置安装依赖库时,您可以使用 urllib3==1.24.3,它应该可以工作。
pip install urllib3==1.24.3
注意:此版本的 urllib3 与 selenium 4 不兼容