PhantomJSでWebページの背景色が未設定の場合の対応

機械学習の勉強を行いたく「Pythonによるスクレイピング&機械学習入門」を購入しました。
Pythonは初めてですが書籍の通りにコーディングし1ページずつ消化しています。

困ったこと

ところがPhantomJSを利用する箇所で困ったことが起きました。
とあるサイトをPhantomJSでスクリーンショットを撮る。といった内容なのですが
書籍のサンプルと、実際にコーディングして取得したスクリーンショットの背景色が異なるのです。

beforeafter

作者さんが問い合わせフォームを設置していたのでそこから問い合わせを行ったところ、まもなく返信があり参考URLを2つ教えていただきました。
作者さんありがとう!!

そこからあちこちより道しながら調べていったところ、
どうやらPhantomJSは背景色が設定されていない場合には背景色を黒で描画するようです!!
Windows10のフォトアプリでは透過色が黒で表示されます。PhantomJSで背景色が設定されていないサイトのスクリーンショットを撮った場合、背景が透過色となりますがこれをフォトアプリで見てみると背景が黒で見えます。
(サンプルのサイトはどこかのタイミングで変更されたと思われます)

書籍のように背景色を白で描画したい

背景色が指定されているサイトをPhantomJSでスクリーンショットを撮るとブラウザで表示した場合同様に表示されるのでひと安心ですが、せっかくなので背景色を指定(白)したいと思い調べました。

困ったときのStackOverflow

「body background color webdriver.PhantomJS」でググると最初に出てきたStackOverflowの記事。
Transparent screenshot with PhantomJS in Selenium [Python]?

英語は読めませんが、なんとなーく「透過、PhantomJSによるスクリーンショット、どーする?」と読めます。
するとAnswer部分に以下の記述が!
blackをwhiteに変更したら背景色を白に指定できそう。

driver.execute_script('document.body.style.background = "black"')

試してみる

~略~
browser = webdriver.PhantomJS()
browser.implicitly_wait(5)
browser.get(url)
#↓追加
browser.execute_script('document.body.style.background = "white"')

browser.save_screenshot("website.png")
browser.quit()

できたっb
website

追記

2,3ページ後の「Seleniumのドライバに対する操作」部分や「JavaScriptを実行してみよう」部分に execute_script の記載がありました。もう少し読み進めてから問い合わせればよかったと思っています。
作者さま、お忙しい中問い合わせに返信して頂きありがとうございます。

スポンサーリンク
google

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
google