python-3.x - Selenium 的连接问题 - Python
问题描述
我在这里使用 Selenium 来自动执行某些操作,出于安全考虑,程序会在登录页面等待用户填写表格并登录以继续,并且由于某种未知原因,如果我等待太长时间无法登录出现以下错误:
Traceback (most recent call last):
File "C:\Program Files\Python36\lib\site-packages\urllib3\connection.py", line 159, in _new_conn
(self._dns_host, self.port), self.timeout, **extra_kw)
File "C:\Program Files\Python36\lib\site-packages\urllib3\util\connection.py", line 80, in create_connection
raise err
File "C:\Program Files\Python36\lib\site-packages\urllib3\util\connection.py", line 70, in create_connection
sock.connect(sa)
OSError: [WinError 10048] Normalmente é permitida apenas uma utilização de cada endereço de soquete (protocolo/endereço de rede/porta)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Program Files\Python36\lib\site-packages\urllib3\connectionpool.py", line 600, in urlopen
chunked=chunked)
File "C:\Program Files\Python36\lib\site-packages\urllib3\connectionpool.py", line 354, in _make_request
conn.request(method, url, **httplib_request_kw)
File "C:\Program Files\Python36\lib\http\client.py", line 1239, in request
self._send_request(method, url, body, headers, encode_chunked)
File "C:\Program Files\Python36\lib\http\client.py", line 1285, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "C:\Program Files\Python36\lib\http\client.py", line 1234, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "C:\Program Files\Python36\lib\http\client.py", line 1026, in _send_output
self.send(msg)
File "C:\Program Files\Python36\lib\http\client.py", line 964, in send
self.connect()
File "C:\Program Files\Python36\lib\site-packages\urllib3\connection.py", line 181, in connect
conn = self._new_conn()
File "C:\Program Files\Python36\lib\site-packages\urllib3\connection.py", line 168, in _new_conn
self, "Failed to establish a new connection: %s" % e)
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x0000020BFC310E48>: Failed to establish a new connection: [WinError 10048] Normalmente é permitida apenas uma utilização de cada endereço de soquete (protocolo/endereço de rede/porta)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Program Files\Python36\MyFiles\SMS\sms.py", line 145, in <module>
main()
File "C:\Program Files\Python36\MyFiles\SMS\sms.py", line 35, in main
conn.login()
File "C:\Program Files\Python36\MyFiles\PSConsultas\PeopleSoft.py", line 23, in login
while self.driver.execute_script('return document.title') != "Employee-facing registry content":
File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\support\event_firing_webdriver.py", line 88, in execute_script
return self._dispatch("execute_script", (script, self._driver), "execute_script", unwrapped_args)
File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\support\event_firing_webdriver.py", line 160, in _dispatch
raise e
File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\support\event_firing_webdriver.py", line 157, in _dispatch
result = getattr(self._driver, d_call)(*d_args)
File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 636, in execute_script
'args': converted_args})['value']
File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 319, in execute
response = self.command_executor.execute(driver_command, params)
File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\remote\remote_connection.py", line 374, in execute
return self._request(command_info[0], url, body=data)
File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\remote\remote_connection.py", line 402, in _request
resp = http.request(method, url, body=body, headers=headers)
File "C:\Program Files\Python36\lib\site-packages\urllib3\request.py", line 72, in request
**urlopen_kw)
File "C:\Program Files\Python36\lib\site-packages\urllib3\request.py", line 150, in request_encode_body
return self.urlopen(method, url, **extra_kw)
File "C:\Program Files\Python36\lib\site-packages\urllib3\poolmanager.py", line 323, in urlopen
response = conn.urlopen(method, u.request_uri, **kw)
File "C:\Program Files\Python36\lib\site-packages\urllib3\connectionpool.py", line 667, in urlopen
**response_kw)
File "C:\Program Files\Python36\lib\site-packages\urllib3\connectionpool.py", line 667, in urlopen
**response_kw)
File "C:\Program Files\Python36\lib\site-packages\urllib3\connectionpool.py", line 667, in urlopen
**response_kw)
File "C:\Program Files\Python36\lib\site-packages\urllib3\connectionpool.py", line 638, in urlopen
_stacktrace=sys.exc_info()[2])
File "C:\Program Files\Python36\lib\site-packages\urllib3\util\retry.py", line 398, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=58747): Max retries exceeded with url: /session/E2CFB04F-5D8B-4755-A52B-77FA482A4F38/execute (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000020BFC310E48>: Failed to establish a new connection: [WinError 10048] Normalmente é permitida apenas uma utilização de cada endereço de soquete (protocolo/endereço de rede/porta)',))
这些异常会导致另一个异常,但我认为这是相关代码。
我这样设置驱动程序:
self.ie = webdriver.Edge(application_path + '\\MicrosoftWebDriver.exe')
self.driver = EventFiringWebDriver(self.ie, MyListener())
MyListener对象仅进行一些隐式等待,也没有任何相关性。
错误是葡萄牙语,但它说“通常每个套接字地址只允许使用一次(协议/网络地址/端口)”
如果您花费的时间不够长,该程序运行得很好,但是该错误有时会在执行它的随机点发生。
提前致谢!
编辑 1
我把整个回溯放在它有帮助的情况下,如果它也有帮助,这是我等待用户登录的循环,这是我可以保证等待太久导致异常的地方:
def login(self):
url = 'https://somepage.com'
self.driver.get(url)
while self.driver.execute_script('return document.title') != "Page Title":
pass
解决方案
推荐阅读
- c# - 如何删除伪 XML 标记之间的空格
- regex - How to understand a particular regular expression pattern?
- javascript - 阻止某些客户端的访问
- python - 如何使用 Pychrome 获取 XML 响应
- ipad - iOS 11 闪跳板带封面解锁
- function-pointers - 指向具有不可指定签名的函数的 C 指针
- json - jq 获取包含特定键的对象
- swift - 坚持 Swift 编码,坚持必须简单的事情
- java - ftp4j 下载文件,大小为 0 字节
- python - 如何在使用 pandas 和 matplotlib 时更改我的 x 轴?