首页 > 解决方案 > 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

标签: python-3.xselenium-webdrivernetwork-programmingmicrosoft-edge

解决方案


推荐阅读