14

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

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

我是否错过了任何其他更成熟的项目,或者会让我更容易做到这一点?

4

5 回答 5

13

有什么理由你没有考虑使用 Chrome 驱动程序使用 Selenium?

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

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

于 2012-03-19T19:17:14.667 回答
10

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

从 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 将无头运行,如果您从最后一行中取出选项,它将向您显示浏览器。

于 2017-09-15T22:48:05.320 回答
2

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

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

于 2012-05-22T15:16:22.567 回答
1

我用它来获取驱动程序:

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

于 2017-08-18T12:09:49.040 回答
0

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

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

于 2012-03-19T19:27:26.547 回答