Python3 ConnectionRefusedError selenium.webdriver.Remote на сервере Ubuntu - PullRequest
0 голосов
/ 02 августа 2020
from selenium import webdriver
url = "http://localhost:4444/wd/hub"
cap = {'browserName': 'chrome'}
driver = webdriver.Remote(command_executor=url, desired_capabilities=cap)

Я пробую это на сервере Ubuntu, но у меня ошибка

Traceback (most recent call last):

File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 156, in _new_conn
conn = connection.create_connection(

File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 84, in create_connection
raise err

 File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 74, in create_connection

 sock.connect(sa)

ConnectionRefusedError: [Errno 111] Connection refused


During handling of the above exception, another exception occurred:


Traceback (most recent call last):

  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 665, in urlopen
httplib_response = self._make_request(

  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 387, in _make_request
conn.request(method, url, **httplib_request_kw)

  File "/usr/lib/python3.8/http/client.py", line 1240, in request
self._send_request(method, url, body, headers, encode_chunked)

  File "/usr/lib/python3.8/http/client.py", line 1286, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)

  File "/usr/lib/python3.8/http/client.py", line 1235, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)

  File "/usr/lib/python3.8/http/client.py", line 1006, in _send_output
self.send(msg)

  File "/usr/lib/python3.8/http/client.py", line 946, in send
self.connect()

  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 184, in connect
conn = self._new_conn()

  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 168, in _new_conn
raise NewConnectionError(

urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f6377a9f8e0>: Failed to establish a new connection: [Errno 111] Connection refused


During handling of the above exception, another exception occurred:


Traceback (most recent call last):

File "test.py", line 89, in <module>
test_some.testMethod()

File "test.py", line 21, in testMethod
driver = webdriver.Remote(command_executor=selenium_url, desired_capabilities=caps)

File "/home/vl/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)

File "/home/vl/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)

File "/home/vl/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 319, in execute
response = self.command_executor.execute(driver_command, params)

File "/home/vl/.local/lib/python3.8/site-packages/selenium/webdriver/remote/remote_connection.py", line 374, in execute
return self._request(command_info[0], url, body=data)

File "/home/vl/.local/lib/python3.8/site-packages/selenium/webdriver/remote/remote_connection.py", line 402, in _request
resp = http.request(method, url, body=body, headers=headers)

File "/usr/lib/python3/dist-packages/urllib3/request.py", line 79, in request
return self.request_encode_body(

File "/usr/lib/python3/dist-packages/urllib3/request.py", line 171, in request_encode_body
return self.urlopen(method, url, **extra_kw)

 File "/usr/lib/python3/dist-packages/urllib3/poolmanager.py", line 330, in urlopen
response = conn.urlopen(method, u.request_uri, **kw)

File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 747, in urlopen
return self.urlopen(

File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 747, in urlopen
return self.urlopen(

File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 747, in urlopen
return self.urlopen(

File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 719, in urlopen
retries = retries.increment(

File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 436, in increment

raise MaxRetryError(_pool, url, error or ResponseError(cause))

urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=4444): Max retries exceeded with url: /wd/hub/session (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f6377a9f8e0>: Failed to establish a new connection: [Errno 111] Connection refused'))

у меня Chrome на сервере Ubuntu

дальнейшая идея - открыть ссылку после при выходе из окна / браузера

можно ли его успешно запустить?

или есть другие библиотеки для решения этой проблемы?

Не знаю, что еще написать так что я могу разместить этот вопрос здесь: /

1 Ответ

0 голосов
/ 03 августа 2020

ConnectionRefusedError: [Errno 111] Connection refused показывает, что ваш скрипт не может получить доступ к удаленному серверу Selenium.

Чтобы использовать удаленный веб-драйвер, на этом удаленном Ubuntu должен быть запущен selenium server server, а исполняемый файл chrome driver должен быть доступен в $PATH. Подробнее об этом можно прочитать здесь

Итак, убедитесь:

  • Вы скачали chrome driver с официального сайта и поместил его в $PATH
  • . Вы загрузили Selenium server с официального сайта и запустили его на удаленном сервере Ubuntu. Вы можете просто запустить сервер Selenium следующим образом:
java -jar selenium-server-standalone-3.XXX.XX.jar

Сервер Selenium по умолчанию связывается со всеми доступными сетевыми интерфейсами с базовым URL-адресом по умолчанию wd/hub, как вы показали в фрагменте кода:

url = "http://[HOST]:4444/wd/hub"

Если вы собираетесь использовать свой скрипт на том же сервере, на котором работает сервер Selenium, localhost должно быть в порядке. Но если вы собираетесь использовать его из удаленного места, вам необходимо указать правильный IP / домен сервера Selenium.

Я бы посоветовал, если вы собираетесь использовать свой скрипт локально на сервере Linux (не GUI среда), вы можете использовать безголовый режим Chrome / Firefox, чтобы добиться того же. Вы можете использовать опцию headless следующим образом:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--headless")

driver = webdriver.Chrome()
driver.get('https://google.com.pk')
print(driver.page_source.encode("utf-8"))
driver.quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...