Создание безголового экземпляра 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?
этому вопросу уже 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 - это безголовый 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
путем переключения