Селен без головы не работает с выбором пользовательского профиля - PullRequest
0 голосов
/ 20 января 2019

Ниже приведен код, который я использую - я попытался сделать его максимально лаконичным.

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

import bs4

options=Options()
#options.add_argument('--headless') # Works while not headless?
options.add_argument('--disable-gpu')  # Last I checked this was necessary.
options.add_argument("--user-data-dir=profiles\\") #Keeps login data
options.add_argument("--profile-directory=Profile 1")

driver=webdriver.Chrome(chrome_options=options)
driver.get("http://www.google.com")
html=driver.page_source
soup=bs4.BeautifulSoup(html, "html.parser")

print(soup)

Основная проблема связана с параметрами --user-data-dir и --profile-directory.В моем тестовом примере пользовательский профиль Chrome (обычно находится в C:\Users\User\AppData\Local\Google\Chrome\User Data) находится в текущем каталоге, чтобы отделить его от любых запущенных в данный момент сеансов Chrome.

Если параметр --headless включен при использовании вышеуказанногопараметры, которые драйвер зависает (CMD остается и не выдает выходные данные в командной строке Python).Однако, если он не включен, окно открывается и работает, как и ожидалось.

Однако --headless работает при использовании любого профиля в указанном выше каталоге по умолчанию.

Это вывод консоли;

[0120/222514.611:ERROR:gpu_process_transport_factory.cc(967)] Lost UI shared context.

DevTools listening on ws://127.0.0.1:59961/devtools/browser/ee317ed6-93c7-47c2-b26d-63647980ba0d
[0120/222514.619:ERROR:devtools_http_handler.cc(289)] Error writing DevTools active port to file
[0120/222514.624:ERROR:cache_util_win.cc(19)] Unable to move the cache: 0
[0120/222514.625:ERROR:cache_util.cc(140)] Unable to move cache folder profiles\Default\GPUCache to profiles\Default\old_GPUCache_000
[0120/222514.625:ERROR:disk_cache.cc(184)] Unable to create cache
[0120/222514.625:ERROR:shader_disk_cache.cc(622)] Shader Cache Creation failed: -2

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

У кого-нибудь есть предложения?Заранее спасибо!

1 Ответ

0 голосов
/ 23 января 2019

Я смог запустить ваш код, добавив следующую опцию.

options.add_argument('--remote-debugging-port=45447')

Без этого код зависал примерно минуту, прежде чем была выдана следующая ошибка:

WebDriverException: Message: unknown error: DevToolsActivePort file doesn't exist

Отрывок комментария, который указал мне на решение:

Когда вы отправляете --remote-debugging-port = 0 в Chrome, devtools выбирает свой собственный порт и записывает его в chrome :: DIR_USER_DATA в виде файла с именем «DevToolsActivePort».

Обычно, если для порта установлено значение, отличное от значения по умолчанию, равного 0, файл DevToolsActivePort проверять не нужно.Полный комментарий и ошибка здесь: ошибка chromedriver

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...