web-dev-qa-db-ja.com

Windows 10でChrome 60でヘッドレス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\

コマンドを実行すると、何かが1秒間処理されるように見えますが、実際には何も表示されません。私は何が間違っていますか?
ありがとう。


編集:

Mark Rajcokが述べたように、--enable-logging--dump-domコマンドに追加すると、機能します。また、--print-to-pdfコマンドはChrome 61.0.3163.79でも機能しますが、保存するために必要な権限を得るには、おそらく出力ファイルに別のパスを指定する必要があります。

そのため、次の2つのコマンドが機能しました。

"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/

次のステップは、DhantomJSのようなダンプされたDOMをDOMセレクターなどでステップスルーできるようになったと思いますが、それは別の質問だと思います。


#2を編集:

それが価値があることについて、私は最近、Puppeteer( https://github.com/GoogleChrome/puppeteer )と呼ばれるNode AP​​I for Headless Chromeに出会いました。これは非常に使いやすく、Headless Chromeのすべての機能を提供します。 Headless Chromeを簡単に使用する方法を探しているなら、私はそれを強くお勧めします。

38
HartleySan

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でそれを行う1つの方法があります。

管理コマンドウィンドウで、Selenium for Pythonをインストールします。

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

ダウンロード ChromeDriver v2.32を展開します。 chromedriver.exeC:\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>
9
Mark Rajcok

これは私のために働く:

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」-もちろん、他のフォルダー/ディレクトリに置き換えることができます。

8
Marrix

現在のバージョン(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の使用は非常に悪い考えであり、信頼できるWebサイトにのみこれを使用する必要がありますが、残念なことに、それがまったく機能する唯一の方法です。

--user-data-dir=...は、デフォルトのディレクトリではなく、指定したディレクトリを使用します。デフォルトのディレクトリは、通常のブラウザですでに使用されている可能性があります。

ただし、HTMLからPDFを作成しようとしている場合、ヘッダーとフッター(file:///...などのテキストを含む)と唯一の実行可能なソリューションを削除できないため、これはほとんど役に立ちません。 Puppeteer を使用します。

6
blade

あなたは良いはずです。 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\
2
Karl L

一般的な問題を回避し、何らかのサービスを使用して作業を行う場合、私は browserless の作成者/創設者であり、ヘッドレスChromeサービスのように。それ以外は、変更に対応し、Chromeを実行するために適切なパッケージとリソースがすべてインストールされていることを確認するのは非常に難しいですが、間違いなく実行可能です。

1
browserless

私はこの質問が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
0