Проблема соединения с Selenium - Python - PullRequest
0 голосов
/ 12 февраля 2019

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