#freeze
[[Ruby]]
#contents
webをダウンロードするにはもちろん、open-uriなんかを使うのがいいわよね。
でも最近はJavaScriptなサイトなんかがあって、うまくいかないことも多いわ。
そんな時の究極界はやっぱり、ブラウザを直接コントロールして取得する事よね。スクリーンショットも撮れるのよ。
* インストール [#g05cf378]
Firefoxと selenium-webdriver をインストールしましょう。
ちなみに Linux なら headless ドライバもほしいわね。これがあるとすごく便利なのだけど、詳しくは次の機会にね。
じゃあ、以下は基本編。
* 基本的な書き方 [#scdb8351]
#!/usr/bin/ruby
require 'selenium-webdriver'
class Hash
def getWeb(fn)
driver = Selenium::WebDriver.for :firefox
driver.get self["url"]
driver.save_screenshot fn
r = driver.page_source
driver.quit
r
end
end
#
page = Hash.new
page["name"] = "YahooJapan"
page["url"] = "http://www.yahoo.co.jp/"
source = page.getWeb(page["name"]+".png")
File.write(page["name"]+".html",source)
こんなところかしら。
''スクリーンショットが、 名前.save_screenshot ファイル名 だけでできる'' のがまた凄いわね。おもしろーい。
でも本当に面白いのは、ブラウザがちゃんと開いてページロードされ、保存されて終わるとこだと思うけどね。
すごい。
ちなみに、 ''このままだと便利だけど速度が出ない'' わよね。さっきの headless っていうのはそこで生きてくるのだけど。
このへんは、また次回ね。
* なんか言語判定がおかしい時 [#v1c681c9]
取り込んだホームページが、手で表示した場合と違う時ってあるかしら。特に日本語サイトにならないとか。
実は ''selenium-webdriverって、ユーザーの標準プロファイルを使わない'' の。使わせるためには、以下のようにしなくちゃいけないのよ。
driver = Selenium::WebDriver.for(:firefox, :profile => "プロファイル名")
firefoxの方は、 firefox -p で起動するとプロファイル作成ができるから、その時につけた名前を指定してね。
* 参考サイト [#kd64abdf]
ここはとても詳しいわね!
- https://www.qoosky.io/techs/71dd2d67ea