Как настроить 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.
    • Вот ссылка на детали о 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')