【问题标题】:How do I use Headless Chrome in Chrome 60 on Windows 10?如何在 Windows 10 上的 Chrome 60 中使用 Headless Chrome?
【发布时间】:2018-01-03 23:15:28
【问题描述】:

我一直在看以下关于 Headless Chrome 的文章:
https://developers.google.com/web/updates/2017/04/headless-chrome

我刚刚将 Windows 10 上的 Chrome 升级到版本 60,但是当我从命令行运行以下任一命令时,似乎什么都没有发生:

chrome --headless --disable-gpu --dump-dom https://www.google.com/
chrome --headless --disable-gpu --print-to-pdf https://www.google.com/

我正在从以下路径(Windows 上 Chrome 的默认安装路径)运行所有这些命令:

C:\Program Files (x86)\Google\Chrome\Application\

当我运行命令时,某些东西似乎会处理一秒钟,但我实际上什么也没看到。我做错了什么?
谢谢。


编辑:

正如 Mark Rajcok 所说,如果将 --enable-logging 添加到 --dump-dom 命令,它会起作用。此外,--print-to-pdf 命令在 Chrome 61.0.3163.79 中也能正常工作,但您可能必须为输出文件指定不同的路径才能获得保存所需的权限。

因此,以下两个命令对我有用:

"C:\Program Files (x86)\Google\Chrome\Application\chrome" --headless --disable-gpu --enable-logging --dump-dom https://www.google.com/
"C:\Program Files (x86)\Google\Chrome\Application\chrome" --headless --disable-gpu --print-to-pdf=D:\output.pdf https://www.google.com/

我想下一步是能够通过带有 DOM 选择器之类的 PhantomJS 之类的转储 DOM,但我想这是一个单独的问题。


编辑#2:

值得一提的是,我最近遇到了一个用于 Headless Chrome 的 Node API,名为 Puppeteer (https://github.com/GoogleChrome/puppeteer),它非常易于使用并提供了 Headless Chrome 的所有功能。如果您正在寻找一种使用 Headless Chrome 的简单方法,我强烈推荐它。

【问题讨论】:

  • 刚刚在 Chrome 61.0.3163.79 中尝试过,但还是不行。
  • 我整个晚上都遇到同样的问题。这对您来说可能是一个不同的问题,但在我的情况下,这是一个具有在程序文件目录中写入文件的相关权限的问题。同样,仅尝试 C:\output.pdf 不起作用,但是 c:\users\username\output.pdf 工作正常。同样,如果您更改文件夹 '...application/chrome' 的权限,它可以正常工作,就像 --print-to-pdf 没有进一步的参数。
  • 这也有效:--screenshot=C:\Temp\screenshot.png

标签: google-chrome command-line windows-10 headless-browser google-chrome-headless


【解决方案1】:

你应该很好。查看Chrome版本目录下

C:\Program Files (x86)\Google\Chrome\Application\60.0.3112.78

对于命令

chrome --headless --disable-gpu --print-to-pdf https://www.google.com/

C:\Program Files (x86)\Google\Chrome\Application\60.0.3112.78\output.pdf 

编辑: 在这种情况下,仍然执行 chrome 可执行文件所在的命令

 C:\Program Files (x86)\Google\Chrome\Application\

【讨论】:

  • 我有那个文件夹,但里面没有 chrome 可执行文件。我收到以下错误:'chrome' is not recognized as an internal or external command, operable program or batch file.
  • 是的,仍然在 chrome 可执行文件位于 C:\Program Files (x86)\Google\Chrome\Application 的上下文中执行我发现文件显示在 C:\Program Files (x86)\Google\Chrome\Application\60.0.3112.78\ 中有意义吗?
  • 我明白你现在在说什么,但是当我从以下路径执行以下命令时,我在60.0.3112.78 或任何地方都没有任何 output.pdf 文件:chrome --headless --disable-gpu --print-to-pdf https://www.google.com/; C:\Program Files (x86)\Google\Chrome\Application\
  • 我有同样的问题,“发生”了一些事情,但没有证据表明它
【解决方案2】:

对于 Chrome 61.0.3163.79,如果我添加 --enable-logging 然后 --dump-dom 会产生输出:

> "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --enable-logging --headless --disable-gpu --dump-dom https://www.chromestatus.com
<body class="loading" data-path="/features">
<app-drawer-layout fullbleed="">
...
</script>
</body>

如果您想以编程方式控制无头 Chrome,这里有一种使用 Python3 和 Selenium 的方法:

在 Admin cmd 窗口中,安装 Selenium for Python:

C:\Users\Mark> pip install -U selenium

Download ChromeDriver v2.32 并解压。我将chromedriver.exe 放在C:\Users\Mark 中,这就是我放置此headless.py Python 脚本的地方:

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("headless")  # remove this line if you want to see the browser popup
driver = webdriver.Chrome(chrome_options = options)
driver.get('https://www.google.com/')
print(driver.page_source)
driver.quit()  # don't miss this, or chromedriver.exe will keep running!

在普通的cmd窗口中运行:

C:\Users\Mark> python headless.py
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" ...
...  lots and lots of stuff here ...
...</body></html>

【讨论】:

  • Mark Rajcok,这可能有效,但我不会做所有这些来测试它。我对你的回答没有异议,只是如果 Chrome 现在可以真正作为无头浏览器工作,你不应该经历所有这些来让它工作。如果在没有任何调整/外部程序的情况下它不能立即工作,那么我将继续使用 PhantomJS。谢谢。如果其他人想测试这个解决方案并支持你,那很好。谢谢。
  • @HartleySan,我发现如果你添加--enable-logging,它会起作用。我更新了答案。
  • 一个小提示:为了避免将脚本和 chromedriver.exe 可执行文件放在同一个文件夹中,请将 chromedriver.exe 放在 %PATH% 中的某个位置(如果使用 PowerShell,则为 $env:PATH )。
【解决方案3】:

如果您想避开一般问题,而只是使用某种服务来为您完成工作,我是 browserless 的作者/创始人,它试图解决在服务中运行无头 Chrome 的问题——时尚。除此之外,很难跟上变化并确保安装了所有适当的包和资源以使 Chrome 运行,但绝对可行。

【讨论】:

  • griffith_joel,老实说,即使我能够让 Headless Chrome 正常工作,但实际用于实际工作的工作量太大,所以我最终还是回到了 PhantomJS。无论如何,无浏览器看起来很酷,并且会检查一下。谢谢。
  • 你想做什么样的事情?当然,PhantomJS 更容易上手,但让它执行任何实质内容往往会导致它崩溃。
  • 从网站的 DOM 中基本抓取结构和数据。另外,是的,它很慢,这很烦人,但它在当时是有效的。
【解决方案4】:

这对我有用:

start chrome --enable-logging --headless --disable-gpu --print-to-pdf=c:\misc\output.pdf https://www.google.com/

...但仅使用“start chrome”和“--enable-logging”并指定路径(用于 pdf) - 并且如果文件夹“misc”存在于 c 目录中。

补充:... pdf 的路径 - 上面的“c:\misc” - 当然可以替换为任何其他文件夹/目录。

【讨论】:

    【解决方案5】:

    我知道这个问题是针对 Windows 的,但由于 Google 将这篇文章作为第一个搜索结果,因此以下是适用于 Mac 的内容:

    Mac OS X

    /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --headless --dump-dom 'http://www.google.com'
    

    请注意,您必须输入http,否则它将不起作用。

    更多提示

    要缩进 html(这在实际臃肿的页面中是非常理想的),请使用 tidy

    /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --headless --dump-dom 'http://www.google.com' | tidy
    

    你可以整理一下:

    brew install tidy
    

    【讨论】:

      【解决方案6】:

      当前版本 (68-70) 似乎需要 --no-sandbox 才能运行,如果没有它,它们绝对什么都不做,并在后台挂起。

      我使用的完整命令是:

      chrome --headless --user-data-dir=tmp --no-sandbox --enable-logging --dump-dom https://www.google.com/ > file.html
      chrome --headless --user-data-dir=tmp --no-sandbox --print-to-pdf=whatever.pdf https://www.google.com/
      

      使用--no-sandbox 是一个非常糟糕的主意,您应该仅将其用于您信任的网站,但遗憾的是,这是使其工作的唯一方法。

      --user-data-dir=... 使用指定目录而不是默认目录,您的常规浏览器可能已经在使用该目录。

      但是,如果您尝试从 HTML 制作 PDF,那么这是相当没用的,因为您无法删除页眉和页脚(包含 file:///... 之类的文本),唯一可行的解​​决方案是使用 @987654321 @。

      【讨论】:

      • 感谢您提供的信息,刀片。老实说,我觉得 Headless Chrome 仍然几乎没用,但也许我还没有充分探索它。或者更确切地说,我还没有找到 PhantomJS 的可行替代品。
      【解决方案7】:

      我通过运行这个(在 chrome.exe 目录中)解决了它,

      start-process chrome -ArgumentList "--enable-logging --headless --disable-gpu --print-to-pdf=c:\users\output.pdf https://www.google.com/"
      

      您可以选择自己的路径。print-to-pdf=&lt;&lt;custom path&gt;&gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-22
        • 1970-01-01
        • 1970-01-01
        • 2018-07-05
        • 2019-03-17
        • 1970-01-01
        • 2018-04-14
        • 1970-01-01
        相关资源
        最近更新 更多