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

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

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

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

Ответ 2

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

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

(Я предполагаю, что вы установили драйвер selenium и chrome):

from selenium import webdriver

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

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

Переключив параметр headless, вы можете смотреть его или нет.