неизвестная ошибка: не удалось запустить Chrome: аварийно завершена ошибка с использованием аргумента user-data-dir с безголовым хромом через Selenium и Python

Я занимаюсь парсингом и, конечно же, пытаюсь получить страницу.

Вот код, который я использую для открытия страницы:

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

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument("user-data-dir=selenium")
print("Opening browser")
driver = webdriver.Chrome("/usr/lib/chromium-browser/chromedriver", options=chrome_options)
print("getting request")
driver.get("http://www.tsetmc.com/Loader.aspx?ParTree=15131F")
print("starting wait")
time.sleep(10)
response = driver.page_source
print("got response, quitting...")
driver.quit()

моя проблема

Проблема в том, что он ничего не делает, когда достигает driver.get() Я имею в виду, что это не заканчивает процесс и не печатает "starting wait". (Проблема сохраняется как на моем ноутбуке, так и на сервере) Я попытался удалить--headless вариант, и он отлично работает на моем ноутбуке (Ubuntu 20.04), но когда я загружаю его на свой сервер и запускаю там (Ubuntu Server 18.04), происходит сбой хрома (сообщение об исключении ниже)

Сообщение: неизвестная ошибка: не удалось запустить Chrome: аварийный выход. (неизвестная ошибка: файл DevToolsActivePort не существует) (процесс, запущенный из местоположения chrome / usr / bin / google-chrome, больше не выполняется, поэтому ChromeDriver предполагает, что Chrome разбился.)

Итак, я пришел к выводу, что мне нужно использовать --headless вариант, так как на моем сервере нет графического интерфейса, и хром вылетает, когда его нет.

В заключение мне нужна помощь в решении проблемы бесконечного ожидания на driver.get()

PS: я могу запустить приведенный ниже код без проблем, что для меня странно:

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument("user-data-dir=selenium")
browser = webdriver.Chrome('/usr/lib/chromium-browser/chromedriver', options=chrome_options)
print("open browser")
browser.get("https://www.codal.ir")
print("get")
time.sleep(10)
response = browser.page_source
print("response")
browser.quit()

1 ответ

Предполагая, что вы создали профиль Chrome с именем selenium, вам нужно добавить-- перед аргументом user-data-dirи передайте абсолютный путь к каталогу профиля Chrome следующим образом:

chrome_options.add_argument("--user-data-dir=/path/to/chromium-profile/selenium")

В качестве альтернативы вы также можете использовать аргумент --profile-directory следующее:

options.add_argument('--profile-directory=selenium')
Другие вопросы по тегам