我一直在看以下关于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:
为了它的价值,我最近遇到了一个名为Puppeteer(https://github.com/GoogleChrome/puppeteer)的无头Chrome节点API,它非常易于使用,并提供无头Chrome的所有功能。如果您正在寻找一种使用Headless Chrome的简便方法,我强烈推荐它。
答案 0 :(得分:8)
使用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>
答案 1 :(得分:6)
这对我有用:
start chrome --enable-logging --headless --disable-gpu --print-to-pdf=c:\misc\output.pdf https://www.google.com/
...但仅限于&#34;启动chrome&#34;和&#34; - 启用日志&#34;并指定了一个路径(用于pdf) - 如果文件夹是&#34; misc&#34;存在于c目录中。
增加:... pdf的路径 - &#34; c:\ misc&#34;上面 - 当然可以替换为任何其他文件夹/目录。
答案 2 :(得分: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:///...
之类的文本),唯一可行的解决方案是使用Puppeteer。
答案 3 :(得分:2)
你应该好。检查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\
答案 4 :(得分:0)
如果你想彻底解决这个问题,并且只是使用某种服务为你做的工作,我是browserless的作者/创始人试图解决无头Chrome的运行问题像服务一样的时尚。除此之外,很难跟上变化并确保安装所有适当的软件包和资源以使Chrome运行,但绝对可行。
答案 5 :(得分:0)
我知道这个问题是针对Windows的,但是由于Google将这篇文章作为第一个搜索结果发布了,这就是适用于Mac的内容:
/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 :(得分:0)
我通过运行这个(在 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=<<custom path>>