Как настроить ChromeDriver для запуска браузера Chrome в режиме без головы через Selenium?
Я работаю над скриптом Python для веб-скрапинга и пошел по пути использования Chromedriver в качестве одного из пакетов. Я хотел бы, чтобы это работало в фоновом режиме без каких-либо всплывающих окон. Я использую опцию 'headless' на chromedriver, и она, кажется, делает свою работу с точки зрения не показа окна браузера, однако, я все еще вижу работающий файл .exe. Смотрите на скриншот того, о чем я говорю. Скриншот
Это код, который я использую для запуска ChromeDriver:
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches",["ignore-certificate-errors"])
options.add_argument('headless')
options.add_argument('window-size=0x0')
chrome_driver_path = "C:\Python27\Scripts\chromedriver.exe"
То, что я пытался сделать, это изменить размер окна в опциях на 0x0, но я не уверен, что что-то сделал, так как файл .exe все еще выскакивал.
Есть идеи, как я могу это сделать?
Я использую Python 2.7 к вашему сведению
Ответы
Ответ 1
Итак, после исправления моего кода:
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches",["ignore-certificate-errors"])
options.add_argument('--disable-gpu')
options.add_argument('--headless')
chrome_driver_path = "C:\Python27\Scripts\chromedriver.exe"
Файл .exe все еще появился при запуске script. Хотя это и избавлялось от некоторого дополнительного вывода, сообщая мне: "Не удалось запустить процесс GPU".
В результате работала под управлением моего Python script с помощью .bat файла
Итак, в основном,
- Сохранить python script, если папка
-
Откройте текстовый редактор и выгрузите следующий код (конечно, отредактируйте script)
c:\python27\python.exe c:\SampleFolder\ThisIsMyScript.py% *
-
Сохраните файл .txt и измените расширение на .bat
- Дважды щелкните это, чтобы запустить файл
Итак, это только что открыло script в командной строке, и ChromeDriver, похоже, работает в этом окне, не выпрыгивая на передний план моего экрана и тем самым решая проблему.
Ответ 2
Это должно выглядеть так:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu') # Last I checked this was necessary.
driver = webdriver.Chrome(CHROMEDRIVER_PATH, chrome_options=options)
Это работает для меня, используя Python 3.6, я уверен, что это будет работать и для 2.7.
Обновление 2018-10-26: в эти дни вы можете просто сделать это:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.headless = True
driver = webdriver.Chrome(CHROMEDRIVER_PATH, chrome_options=options)
Ответ 3
При работе с Selenium Client 3.11.x, ChromeDriver v2.38 и Google Chrome v65.0.3325.181 в режиме без наушников необходимо учитывать следующие моменты:
- Вам нужно добавить аргумент
--headless
для вызова Chrome в режиме без головы. - Для систем Windows необходимо добавить аргумент
--disable-gpu
- Что касается Headless: сделать флаг --disable-gpu ненужным.
--disable-gpu
Флаг Linux --disable-gpu
не требуется в системах Linux и MacOS. - Так как SwiftShader терпит неудачу, утверждение в Windows в автономном режиме
--disable-gpu
флаг --disable-gpu
также станет ненужным в системах Windows. - Аргумент
start-maximized
требуется для развернутого Viewport. -
Вам может потребоваться добавить аргумент --no-sandbox
чтобы обойти модель безопасности ОС.
-
Пример блока кода Windows:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--headless") # Runs Chrome in headless mode.
options.add_argument('--no-sandbox') # Bypass OS security model
options.add_argument('--disable-gpu') # applicable to windows os only
options.add_argument('start-maximized') #
options.add_argument('disable-infobars')
options.add_argument("--disable-extensions")
driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\path\to\chromedriver.exe')
driver.get("http://google.com/")
print ("Headless Chrome Initialized on Windows OS")
-
Пример блока кода Linux:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--headless") # Runs Chrome in headless mode.
options.add_argument('--no-sandbox') # # Bypass OS security model
options.add_argument('start-maximized')
options.add_argument('disable-infobars')
options.add_argument("--disable-extensions")
driver = webdriver.Chrome(chrome_options=options, executable_path='/path/to/chromedriver')
driver.get("http://google.com/")
print ("Headless Chrome Initialized on Linux OS")
Обновление (23 апреля-2018)
set_headless(headless=True)
браузера Google Chrome в режиме без головы стал намного проще благодаря доступности метода set_headless(headless=True)
следующим образом:
-
Документация:
set_headless(headless=True)
Sets the headless argument
Args:
headless: boolean value indicating to set the headless option
-
Образец кода:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.set_headless(headless=True)
driver = webdriver.Chrome(options=options, executable_path=r'C:\path\to\chromedriver.exe')
driver.get("http://google.com/")
print ("Headless Chrome Initialized")
driver.quit()
Примечание: аргумент --disable-gpu
реализован внутри.
Обновление (13 октября-2018)
Чтобы теперь запускать браузер Chrome в автономном режиме, вы можете просто установить свойство --headless
через класс Options()
следующим образом:
-
Образец кода:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.headless = True
driver = webdriver.Chrome(options=options, executable_path=r'C:\path\to\chromedriver.exe')
driver.get("http://google.com/")
print ("Headless Chrome Initialized")
driver.quit()
Outro
Как сделать Firefox безголовым программно в Selenium с помощью Python?
Ответ 4
-
.exe будет работать в любом случае. Согласно Google - "Запуск в режиме безглавых, т.е. Без зависимости от пользовательского интерфейса или сервера отображения".
-
Лучше добавить 2 тире к аргументам командной строки, т.е. options.add_argument('--headless')
-
В режиме без головного мозга также предлагается отключить GPU, т.е. options.add_argument('--disable-gpu')