在Python中创建无头Chrome实例

时间:2012-03-19 19:09:48

标签: python google-chrome headless-browser embedded-browser

这个问题在研究了用于在Python中创建无头Chrome实例的可用选项并要求确认或描述“更好方法”的资源之后描述了我的结论。

从我所看到的,似乎在Python应用程序中开始使用无头Chrome实例的最快方法是使用CEF(http://code.google.com/p/chromiumembedded/)和CEFPython(http://code.google.com/p/cefpython/)。 CEFPython似乎还不成熟,所以使用它可能意味着在我能够加载一个加载网页(和所需文件)的无头Chrome实例之前进一步定制,解析一个完整的DOM,然后让我从Python运行任意JS。

我是否错过了其他更成熟或更容易让我更轻松的项目?

5 个答案:

答案 0 :(得分:10)

答案 1 :(得分:8)

这个问题现在已经有5年了,当时使用python运行无头镀铬是一个很大的挑战,但好消息是:

从2017年6月发布的第59版开始,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)

现在你的chrome会无头地运行,如果从最后一行取出选项,它会显示浏览器。

答案 2 :(得分:2)

虽然我是CasperJS的作者,但我邀请您查看Ghost.py使用Python编写的webkit Web客户端

虽然受到CasperJS的启发,但它不是基于PhantomJS - 它仍然使用PyQt绑定和Webkit。

答案 3 :(得分:0)

casperjs是一个无头的webkit,但它不会给你我所知道的python绑定;它似乎是面向命令行的,但这并不意味着你不能以满足你所追求的方式从python中运行它。当您运行casperjs时,您提供了要执行的javascript的路径;所以你需要从Python发出它。

但除此之外,我提出了casperjs,因为它似乎很好地满足了轻量级,无头的要求。

答案 4 :(得分:0)

我用它来获取驱动程序:

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参数,您既可以观看也可以观看。