Создание безголового экземпляра Chrome в Python

этот вопрос описывает мой вывод после изучения доступных вариантов создания безголового экземпляра Chrome в Python и запрашивает подтверждение или ресурсы, описывающие "лучший способ".

из того, что я видел, кажется, что самый быстрый способ начать работу с безголовым экземпляром Chrome в приложении Python-использовать CEF (http://code.google.com/p/chromiumembedded/) с Цефпифоном (http://code.google.com/p/cefpython/). Однако CEFPython кажется преждевременным, поэтому его использование, скорее всего, будет означать дальнейшую настройку, прежде чем я смогу загрузить безголовый экземпляр Chrome, который загружает веб-страницы (и необходимые файлы), разрешает завершенный DOM, а затем позволяет мне запускать произвольные JS против него из Python.

Я пропустил какие-либо другие проекты, которые являются более зрелыми, или сделает это легче для меня?

5 ответов


любая причина, по которой вы не рассматривали селен с драйвером Chrome?

http://code.google.com/p/selenium/wiki/ChromeDriver

http://code.google.com/p/selenium/wiki/PythonBindings


этому вопросу уже 5 лет, и в то время было большой проблемой запустить безголовый хром с помощью python, но хорошие новости:

начиная с версии 59, выпущенной в июне 2017 года, Chrome поставляется с безголовым драйвером, что означает, что мы можем использовать его в неграфической серверной среде и запускать тесты без визуального отображения страниц и т. д., что экономит много времени и памяти для тестирования или очистки. Установка Селена для этого очень проста:

(I предположим, что вы установили драйвер selenium и chrome):

from selenium import webdriver

#set a headless browser
options = webdriver.ChromeOptions()
options.add_argument('headless')
browser = webdriver.Chrome(chrome_options=options)

и теперь ваш chrome будет работать без головы, если вы вынете параметры из последней строки, он покажет вам браузер.


пока я автор CasperJS, Я приглашаю вас проверить Ghost.py,веб-клиент webkit, написанный на Python.

хотя он сильно вдохновлен CasperJS, он не основан на PhantomJS - Он все еще использует PyQt привязки и Webkit, хотя.


casperjs - это безголовый webkit, но он не даст вам привязки python, о которых я знаю; он кажется ориентированным на командную строку, но это не значит, что вы не можете запустить его с python таким образом, чтобы удовлетворить то, что вам нужно. Когда вы запускаете casperjs, вы предоставляете путь к javascript, который хотите выполнить; поэтому вам нужно будет испустить это из Python.

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


Я использую это, чтобы заставить водителя:

def get_browser(storage_dir, headless=False):
    """
    Get the browser (a "driver").

    Parameters
    ----------
    storage_dir : str
    headless : bool

    Results
    -------
    browser : selenium webdriver object
    """
    # find the path with 'which chromedriver'
    path_to_chromedriver = '/usr/local/bin/chromedriver'

    from selenium.webdriver.chrome.options import Options
    chrome_options = Options()
    if headless:
        chrome_options.add_argument("--headless")
    chrome_options.add_experimental_option('prefs', {
        "plugins.plugins_list": [{"enabled": False,
                                  "name": "Chrome PDF Viewer"}],
        "download": {
            "prompt_for_download": False,
            "default_directory": storage_dir,
            "directory_upgrade": False,
            "open_pdf_in_system_reader": False
        }
    })

    browser = webdriver.Chrome(path_to_chromedriver,
                               chrome_options=chrome_options)
    return browser

путем переключения