在Python中创建一个无头Chrome实例



这个问题描述了我在研究了在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,因为它似乎非常好地满足了轻量级、无头的要求。

相关内容

  • 没有找到相关文章

最新更新