这个问题描述了我在研究了在Python中创建无头Chrome实例的可用选项后得出的结论,并要求确认或提供描述"更好方法"的资源。
据我所见,在Python应用程序中开始使用Chrome的无头实例的最快方法似乎是使用CEF(http://code.google.com/p/chromiumembedded/)与CEFPython(http://code.google.com/p/cefpython/)。不过,CEFPython似乎为时过早,因此在我能够加载一个无头Chrome实例之前,使用它可能意味着进一步的定制,该实例加载网页(和所需文件),解析一个完整的DOM,然后让我从Python中对其运行任意JS。
我是否错过了其他更成熟或更容易的项目?
您有没有考虑在Chrome驱动程序中使用Selenium的原因?
http://code.google.com/p/selenium/wiki/ChromeDriver
http://code.google.com/p/selenium/wiki/PythonBindings
这个问题已经存在5年了,当时使用python运行无头chrome是一个巨大的挑战,但好消息是:
从2017年6月发布的59版开始,Chrome提供了一个无头驱动程序,这意味着我们可以在非图形服务器环境中使用它并运行测试,而无需可视化渲染页面等,这为测试或抓取节省了大量时间和内存。设置Selenium非常容易:
(我假设您已经安装了硒和铬驱动程序):
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,一个用Python编写的webkit web客户端。
虽然它在很大程度上受到了CasperJS的启发,但它并不是基于PhantomJS——尽管如此,它仍然使用PyQt绑定和Webkit。
我用它来获取驱动程序:
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
参数,您可以观看也可以不观看。
casperjs是一个无头的webkit,但据我所知,它不会为您提供python绑定;它看起来是面向命令行的,但这并不意味着你不能从python中运行它,以满足你的需求。当您运行casperjs时,您提供了一个要执行的javascript的路径;所以您需要从Python中发出它。
但除此之外,我提到了casperjs,因为它似乎非常好地满足了轻量级、无头的要求。