Как запустить браузер Chrome без головы

Я пытаюсь настроить браузер Chrome без заголовка на своем Mac, но получаю ошибки.

Я пробовал следовать этим руководствам для справки:

https://intoli.com/blog/running-selenium-with-headless-chrome/ https://duo.com/decipher/driving-headless-chrome-with-python

и используя эти страницы stackoflow

Как заставить Chromedriver в безголовом режиме работать без головы? и selenium.common.exceptions.WebDriverException: Сообщение: Исполняемый файл chromedriver должен иметь ошибку PATH с хромом

Безголовый браузер работал с phantomjs, но я знаю, что селен больше не хочет, чтобы мы его использовали. Это то, что я запускаю прямо сейчас: (почти точно один ответ на переполнение стека)

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

chrome_options = Options()
chrome_options.add_argument("--headless")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("http://www.duo.com")
print("Chrome Browser Initialized in Headless Mode")

это мой ответ:

Traceback (most recent call last):
  File "headless_browser.py", line 47, in <module>
    driver = webdriver.Chrome(chrome_options=chrome_options)
  File "/Users/BCohen/anaconda3/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 75, in __init__
    desired_capabilities=desired_capabilities)
  File "/Users/BCohen/anaconda3/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 154, in __init__
    self.start_session(desired_capabilities, browser_profile)
  File "/Users/BCohen/anaconda3/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 243, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/Users/BCohen/anaconda3/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 312, in execute
    self.error_handler.check_response(response)
  File "/Users/BCohen/anaconda3/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary
  (Driver info: chromedriver=2.36.540469 (1881fd7f8641508feb5166b7cae561d87723cfa8),platform=Mac OS X 10.13.2 x86_64)



Ответы (1)


Ошибка дает нам следующую подсказку:

selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary
  (Driver info: chromedriver=2.36.540469 (1881fd7f8641508feb5166b7cae561d87723cfa8),platform=Mac OS X 10.13.2 x86_64)

Ошибка говорит о том, что ChromeDriver не нашел двоичный файл Chrome в ожидаемом месте.

Возможны два следующих решения:

  • Согласно Требованиям, установка Chrome должна находиться в определенном месте.

  • В качестве альтернативы вы можете передать абсолютный путь двоичного файла Chrome через экземпляр класса Options следующим образом:

    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.binary_location = "/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome"
    
  • Наконец, при запуске WebDriver и WebClient вам необходимо отправить аргумент Key executable_path вместе с Value chrome_path.

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.binary_location = "/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome"
    options = Options()
    options.add_argument("--headless")
    options.add_argument("--no-sandbox")
    options.add_argument("start-maximized")
    options.add_argument("disable-infobars")
    options.add_argument("--disable-extensions")
    chrome_path = "/home/ec2-user/chrome/chromedriver"
    driver = webdriver.Chrome(executable_path=chrome_path, chrome_options=options)
    driver.get("http://www.duo.com")
    print("Chrome Browser Initialized in Headless Mode")
    

Альтернатива

Программный вызов браузера Google Chrome в режиме без головы стал намного проще благодаря доступности метода _5 _ следующим образом:

  • Документация :

    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(chrome_options=chrome_options, executable_path=r'C:\path\to\chromedriver.exe')
    driver.get("http://google.com/")
    print ("Headless Chrome Initialized")
    driver.quit()
    
person DebanjanB    schedule 30.03.2018
comment
Вы знаете, почему ссылка, которую я опубликовал для ответа, работала нормально? - person Bob; 31.03.2018