Я использую 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