おはようございます。わてぷです。
自動テスト面白そう、なんかやってみたいと思い、よく聞くSeleniumを使ったスクレイピングをしてみました。
環境はこちら
1 2 3 4 5 6 7 8 9 |
$ sw_vers ProductName: Mac OS X ProductVersion: 10.13.6 BuildVersion: 17G10021 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin17] |
使用するブラウザはFirefox。
作ったもの
まずは、以前の記事通り、geckodriverを準備するところまで。

「Unable to find Mozilla geckodriver.」と表示された時
おはようございます。わてぷです。
最近、以下の本を購入し、Seleniumを使って何ができるのかを色々と試しております。
実践Selenium WebDriver /オライリ-・ジャパン/サタヤ・アバ...
その後は以下の通り記述。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
require 'selenium-webdriver' # 変数driverにseleniumを入れる driver = Selenium::WebDriver.for :firefox # getを使って特定のurlを開く driver.get("https://watepu.com/") # 目標カテゴリーの要素を取得しgoalに入れる goal = driver.find_element(:id, 'menu-item-47') # 目標をクリック goal.click # ページをスクリーンショットで取得 driver.save_screenshot('goal.png') # 検索欄に文字を入力して検索する search = driver.find_element(:class, 'search-edit') submit = driver.find_element(:class, 'search-submit') search.send_keys 'Ruby' sleep 3 submit.click # 最初の内容をテキストで出力 first_title = driver.find_element(:id, 'list').find_element(:class, 'entry-card-title') puts first_title.text # ページをスクリーンショットで取得 driver.save_screenshot('search.png') # 3秒間待つ sleep 3 # ブラウザを閉じる driver.quit |
これを実行することで、
- Firefoxを起動
- 自分のブログを表示させる
- 「目標」のカテゴリーを開く
- スクリーンショットをとって「goal.png」という名前で保存(同じディレクトリ内に保存される)
- 検索欄に「Ruby」と入力して検索をする
- 検索して出てきた最初の記事のタイトルをターミナル上へ出力
- 「Ruby」と検索して出てきたページのスクリーンショットをとって「search.png」という名前で保存
- Firefoxを閉じる
ということが出来ました。
ところどころにsleepを入れているのは、実行したらあっという間に終わってしまい、何しているのかよく分からなかったためです。
ぶっちゃけ無くても大丈夫。
要素をclassで取得している箇所もありますが、基本的にはidで取得した方が良さそうですね。
多分、他にも色々なことが出来ると思うので、暇を見つけて試してみたいですね。
それでは!
コメント