Как настроить ChromeDriver для запуска браузера Chrome в режиме Headless через 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 к вашему сведению
18 ответов
Поэтому после исправления моего кода:
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 все еще появлялся при запуске скрипта. Хотя это избавило меня от некоторых дополнительных выводов, говорящих мне "Не удалось запустить процесс GPU".
В итоге я запустил скрипт на Python с использованием файла.bat
В общем,
- Сохранить скрипт Python, если папка
Откройте текстовый редактор и выведите следующий код (конечно, отредактируйте его в своем скрипте)
c: \ python27 \ python.exe c: \ SampleFolder \ ThisIsMyScript.py% *
Сохраните файл.txt и измените расширение на.bat
- Дважды щелкните по нему, чтобы запустить файл
Так что это только что открыл скрипт в командной строке, и ChromeDriver, кажется, работает в этом окне, не высовываясь в переднюю часть моего экрана и, таким образом, решая проблему.
Это должно выглядеть так:
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)
При работе с 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 и MacOS. - Согласно SwiftShader не удается установить на Windows в режиме без головы
--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)
Программный вызов браузера 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()
Обновление 20 августа 2020 г. - Теперь все просто!
from selenium.webdriver.support.ui import WebDriverWait
chrome_options = webdriver.ChromeOptions()
chrome_options.headless = True
self.driver = webdriver.Chrome(
executable_path=DRIVER_PATH, chrome_options=chrome_options)
ОБНОВЛЕНО В моем случае все работает нормально:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.headless = True
driver = webdriver.Chrome(CHROMEDRIVER_PATH, options=options)
Только что поменял в 2020 году. У меня работает нормально.
В любом случае.exe будет работать. По словам Google - "Запустить в автономном режиме, т. Е. Без пользовательского интерфейса или отображения зависимостей сервера".
Лучше добавить две черты к аргументам командной строки, т.е.
options.add_argument('--headless')
В безголовом режиме также предлагается отключить графический процессор, т.е.
options.add_argument('--disable-gpu')
Попробуйте использовать ChromeDriverManager
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.set_headless()
browser =webdriver.Chrome(ChromeDriverManager().install(),chrome_options=chrome_options)
browser.get('https://google.com')
# capture the screen
browser.get_screenshot_as_file("capture.png")
Приведенные выше решения не работают с веб-сайтами с защитой от облачных вычислений, например:
https://paxful.com/fr/buy-bitcoin
.
Измените агент следующим образом: options.add_argument("user-agent=Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/84.0.4147.125 Safari/537.36")
Исправление найдено здесь: в чем разница в доступе к веб-сайту Cloudflare с помощью ChromeDriver/Chrome в обычном / безголовом режиме через Selenium Python
System.setProperty("webdriver.chrome.driver",
"D:\\Lib\\chrome_driver_latest\\chromedriver_win32\\chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--allow-running-insecure-content");
chromeOptions.addArguments("--window-size=1920x1080");
chromeOptions.addArguments("--disable-gpu");
chromeOptions.setHeadless(true);
ChromeDriver driver = new ChromeDriver(chromeOptions);
Поскольку исполняемый путь устарел
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver import ChromeOptions
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
options = ChromeOptions()
options.add_argument('--headless=new')
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
Сначала я столкнулся с проблемой — пустой экран при использовании безгласного режима для Chrome с Selenium.
Я попробовал переопределить пользовательский агент, но это не помогло. И тут я увидел в документации, что для Chrome версии 109 и далее рекомендуется устанавливать безголовый режим следующим образом:
options.addArguments("--headless=new")
Итак, полный код для запуска безголового режима:
ChromeOptions options = new ChromeOptions()
options.addArguments("--window-size=1920,1080")
options.addArguments("--headless=new")
options.setExperimentalOption("w3c", false)
from chromedriver_py import binary_path
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--window-size=1280x1696')
chrome_options.add_argument('--user-data-dir=/tmp/user-data')
chrome_options.add_argument('--hide-scrollbars')
chrome_options.add_argument('--enable-logging')
chrome_options.add_argument('--log-level=0')
chrome_options.add_argument('--v=99')
chrome_options.add_argument('--single-process')
chrome_options.add_argument('--data-path=/tmp/data-path')
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--homedir=/tmp')
chrome_options.add_argument('--disk-cache-dir=/tmp/cache-dir')
chrome_options.add_argument('user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36')
driver = webdriver.Chrome(executable_path = binary_path,options=chrome_options)
Обновление августа 2021 года:
Вероятно, самый быстрый способ сделать это:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.set_headless = True
driver = webdriver.Chrome(options=options)
options.headless = True
устарел.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('/usr/bin/chromedriver', options=chrome_options)
driver.get('https://www.example.com')
print(driver.title)
driver.quit()
chromeoptions=add_argument("--no-sandbox");
add_argument("--ignore-certificate-errors");
add_argument("--disable-dev-shm-usage'")
не поддерживаемый браузер
решение:
Open Browser ${event_url} ${BROWSER} options=add_argument("--no-sandbox"); add_argument("--ignore-certificate-errors"); add_argument("--disable-dev-shm-usage'")
не забудьте добавить пробелы между
${BROWSER}
параметры
Есть возможность скрыть окно chromeDriver.exe в альфа- и бета-версиях Selenium 4.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService # Similar thing for firefox also!
from subprocess import CREATE_NO_WINDOW # This flag will only be available in windows
chrome_service = ChromeService('chromedriver', creationflags=CREATE_NO_WINDOW)
driver = webdriver.Chrome(service=chrome_service) # No longer console window opened, niether will chromedriver output
Вы можете проверить это здесь . Чтобы установить бета-версию или альфа-версию, вы можете выполнить команду «pip install selenium == 4.0.0.a7» или «pip install selenium == 4.0.0.b4» (a7 означает альфа-7, а b4 означает бета-4, поэтому для другие версии, которые вы хотите, вы можете изменить команду.) Чтобы импортировать определенную версию библиотеки в python, вы можете посмотреть здесь .
ПОСЛЕДНЕЕ ОБНОВЛЕНИЕ
Недавно было выполнено обновление безголового режима Chrome. Флаг--headless
теперь изменен и может использоваться, как показано ниже
Для Chrome версии 109 и выше:--headless=new
флаг позволяет нам исследовать полную функциональность браузера Chrome в автономном режиме. Для Chrome версии 108 и ниже (до версии 96)--headless=chrome
option предоставит нам безголовый хром-браузер.
Итак, добавим
options.add_argument("--headless=new")
для более новой версии Chrome в автономном режиме, как указано выше.
Нижеприведенное отлично работает для меня с версией Chrome110.0.5481.104
chrome_driver_path = r"E:\driver\chromedriver.exe"
options = webdriver.ChromeOptions()
options.add_argument('--disable-gpu')
//New Update
options.add_argument("--headless=new")
options.binary_location = r"C:\Chrome\Application\chrome.exe"
browser = webdriver.Chrome(chrome_driver_path, options=options)
browser.get('https://www.google.com')
Вы можете запустить Headless Chrome с Selenium на Python, как показано ниже. *Мой ответ объясняет это примерами Django и--headless=new
лучше, потому что--headless
использует старый безголовый режим, согласно данным «Headless is Going Away!»:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--headless=new") # Here
driver = webdriver.Chrome(options=options)
Или:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--headless=new") # Here
driver = webdriver.Chrome(options=options)