Создание безголового экземпляра 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.

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


person Trindaz    schedule 19.03.2012    source источник
comment
Почему именно вам нужен безголовый экземпляр Chrome?   -  person Daniel Roseman    schedule 19.03.2012
comment
@Marcin, я разрабатываю для Windows 7, но опубликую приложение как веб-сайт в Ubuntu.   -  person Trindaz    schedule 19.03.2012
comment
@Trindaz, у CefPython теперь есть настоящий API, в ближайшие недели предстоит еще много работы, но некоторые вещи уже работают, например вызов javascript из python: browser.GetMainFrame().ExecuteJavascript(alert('hello!'))   -  person Czarek Tomczak    schedule 07.07.2012
comment
@CzarekTomczak спасибо. Я задал уточняющий вопрос, касающийся CefPython, на magpcss.org/ceforum. Есть ли группа в гугле, посвященная этому?   -  person Trindaz    schedule 07.07.2012
comment
@Trindaz, я спросил Маршалла, можно ли создать там подфорум на mapgcss, если нет, я подумаю о размещении собственного форума и поставлю ссылку на сайт google-cefpython.   -  person Czarek Tomczak    schedule 07.07.2012
comment
@CzarekTomczak, почему бы просто не создать группу Google? Это то, что используют все другие группы: зомби, фантом, jsdom и т. д. И не могли бы вы просто написать мне по электронной почте dave dot trindall на gmail dot com, чтобы продолжить этот разговор? Мы должны нарушать правила SO, имея это здесь и обратно   -  person Trindaz    schedule 07.07.2012


Ответы (5)


По какой причине вы не рассматривали Selenium с драйвером Chrome?

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

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

person jdi    schedule 19.03.2012
comment
В сочетании с youtube.com/watch?v=DL7gyuqkzzU это дает мне именно то, что я необходимость - person Trindaz; 20.03.2012
comment
Чтобы подытожить ютуб, нужно: из pyvirtualdisplay импортировать Display; дисплей = дисплей (видимый = 0, размер = (1024, 768)); дисплей.старт() - person spookylukey; 04.06.2012

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

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

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

from selenium import webdriver

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

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

person Ibo    schedule 15.09.2017

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

Хотя он сильно вдохновлен CasperJS, он не основан на PhantomJS — он по-прежнему использует PyQt и Webkit.

person NiKo    schedule 22.05.2012

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

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, вы можете либо смотреть его, либо нет.

person Martin Thoma    schedule 18.08.2017

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

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

person sethcall    schedule 19.03.2012
comment
Casperjs — это среда тестирования для PhantomJS, которая представляет собой безголовый QtWebkit. Это позволяет вам общаться через REST API. - person Tobias Cudnik; 25.04.2012