неизвестная ошибка: не удалось запустить 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')