質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

10210閲覧

ヘッドレスChromeでJavaScriptを有効にする

tamo_solo

総合スコア26

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

4クリップ

投稿2018/12/18 21:58

WEBページを巡回取得して、スクレイピングする処理を作っています。
いくつかのページは動的なページでヘッドレスブラウザであるChromeをpython上で動作させて取得しています。

とあるページで設定の変更が入ったらしくページ取得したところ「JavaScriptの設定を有効にしてください」といったメッセージがHTML返送されてきました。

ヘッドレスChromeでJavaScriptを有効にしてページ取得する方法を教えてください。
なお取得時のユーザエージェントは以下のように設定しています

USERAGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) '\

'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/55.0.2883.95 Safari/537.36 '

argumentは以下2行を追加しています

'--headless' '--disable-gpu'

以上です、アドバイスよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

barobaro

2018/12/19 00:23

headlessを外してブラウザを表示してもだめなのでしょうか? URLがないとこちらでも試せないのでわかりません。
CHERRY

2018/12/19 02:35 編集

「とあるページ」が、スクレイピング対策を実施されたのだと思いますが、情報がないので判断できません。 Webブラウザで確認しながら、怪しそうな部分を順番に試していくしかないと思います。
tamo_solo

2018/12/19 03:38

アドバイスありがとうございます!思考が深まるので大変助かります! ----- ヘッドレスブラウザ対策を入れているくらいなのページなので(内容的にそんなページには思えないのですが)URL添付はご勘弁ください(汗) headlessを外してブラウザで見る件ですが、当該サーバがGUIを持っていない完全なコマンドライン運用のVPSサーバで、それ以上のリソースを積んでないこともあり、今のところ難しいです。当然ですがPC上のブラウザでは問題なく表示されます...
CHERRY

2018/12/19 04:30

問題のプログラムを 手元のPCに実行環境を構築して実行してみたらどのような動作をしますか?
guest

回答2

0

https://gather-tech.info/news/2017/08/14/Gather59.html

ヘッドレスChromeからのアクセスを検出する方法について。User Agentによる判定、プラグインの有無による判定、画像読み込みがエラーになるときのサイズによる判定方法などが紹介されている。

一般的なUser Agentによる判定だと簡単に偽装できてしまうのでそれ以外の検出方法が書かれていて参考になります。画像が読み込めない場合のサイズの違いで検出できるとは驚きです。

Detecting Chrome Headless
https://antoinevastel.com/bot%20detection/2017/08/05/detect-chrome-headless.html

headlessを外して表示されるようでしたら上記の対策がされている可能性が高いと思います。

投稿2018/12/19 01:11

barobaro

総合スコア1286

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tamo_solo

2018/12/19 03:42

情報ありがとうございます。なるほどです、ヘッドレスブラウザ対策、参考になります! (再質問になって申し訳ないのですが)実行しているサーバはGUIを持たないコマンドライン運用のVPSサーバなのですが、そういった場合headlessを外してもエラーなく動作するのでしょうか?(※お時間あれば教えてください。もし時間なければスルーしていただいてOKです、自分でも帰宅後に試してみます)
CHERRY

2018/12/19 04:32 編集

(横からですが...) 動くかどうかは、環境次第です。 GUIに必要な環境やライブラリがあれば、モニタがなくても動作する場合もあります。
barobaro

2018/12/19 04:55

別回答で仮想ディスプレイについて書きました。
guest

0

ベストアンサー

Xvfbをインストールして仮想ディスプレイに表示でいけそうです。

参考リンク
https://web-dev.hatenablog.com/entry/linux/ubuntu/install-firefox-xvfb
https://blog.amedama.jp/entry/2016/01/03/115602

seleniumやブラウザ等のヘッドレス環境はできていると思うので省略

sh

1sudo apt install xvfb 2/usr/bin/Xvfb :99 -ac -screen 0 1024x768x8 & export DISPLAY=":99"

下のプログラムを実行してスクリーンショットまでは確認しました。

python

1from selenium import webdriver 2 3driver = webdriver.Firefox() 4 5driver.get('http://www.yahoo.co.jp') 6 7# ブラウザ操作 8 9driver.save_screenshot("ss.png") 10 11html = driver.page_source 12driver.quit()

実験結果教えてください。

投稿2018/12/19 04:54

barobaro

総合スコア1286

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tamo_solo

2018/12/19 21:00

ありがとうございます!バーチャルで動作するXがあるのですね! ただちょっと週末まで時間が取れそうにないです、かならず週末に試してみて結果をお知らせします!
barobaro

2018/12/20 02:41

ブラウザで成功しているようですので大丈夫だとは思います
tamo_solo

2018/12/22 01:28

ちょっと試してみましたが、Firefox前提なのですね(Chrome headlessを使ったものではない)。ちょっと自分のスキルでは確認には時間がかかりそうです...
tamo_solo

2018/12/22 01:45

環境を作り、いただいたプログラムをそのままに実行してみました。確かにYahooのページはスクショが取れるのですが、該当のページは取れませんでした(0バイトのファイルになりました)。うーん。
tamo_solo

2018/12/22 02:03

以下のようにクラス解析待ちも入れてみましたがタイムアウトしました。うーん from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Firefox() driver.get('https://(省略)') element = WebDriverWait(driver, 300).until( EC.presence_of_all_elements_located((By.CLASS_NAME, "(省略)")) ) driver.save_screenshot("ss.png") html = driver.page_source driver.quit()
tamo_solo

2018/12/22 02:42

この方向ならできそうだと思っていますが、ちょっと時間がかかりそうです。いったん当回答をベストアンサーとして解答済みとします。追加情報あれば、追記します!
barobaro

2018/12/22 12:21

ご連絡ありがとうございます。 firefoxの方がインストール簡単だったのでchromeでも大丈夫だと思います。 まず実験するのでしたらサーバーでやるよりもvirtualbox等で画面表示しながらする方が早いと思います。 まずは表示されるかどうかすぐわかりますから
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問