こんにちは。
おぎーです。
今回もブラウザ操作の自動化について学習していきましょう。
前回はGoogleの日本語ページを開くためのコードを学習しました。
今回は、前回の内容を踏まえて、実際にサイト内を自動でクリックする作業をするコードを学習していきます。
今回も前回と同様にjupyter labでコードを実行しようと思いますので、
分からない方は、前回の記事を読んでみてください。
今回のコード
まず今回のコードを載せます。
!pip install selenium
!pip install beautifulsoup4
from selenium import webdriver
import time
import pandas as pd
browser = webdriver.Chrome(executable_path = 'chromedriver.exeのファイルパス')
browser.implicitly_wait(3)
url_login = "https://www.rakuten.co.jp/"
browser.get(url_login)
time.sleep(2)
print("access_success")
search_1 = browser.find_element_by_css_selector('#rnkDailyGenreLink_0_unlink > div > img')
time.sleep(2)
search_1.click()
print("realtime_select")
search_2 = browser.find_element_by_css_selector('#rnkGenreInfoUrlHasHistory')
time.sleep(2)
search_2.click()
print("realtimeranling_click")
まずは、ぼーっと眺めて何をしているのかをかんがえてみてください。
楽天のショップサイトでのリアルタイムランキングを見るために、
Chromeを立ち上げて、リアルタイムランキングのページまで移動する人間の操作を自動化してみました。
早速上の行から順番に解説の方をしていこうと思います。
コード解説
beautifulsoupの登場
前回の記事を読んでくださった方はseleniumのインストールはすでになんとなく頭に入っているかと思います。
こちらをみてください。
!pip install selenium
!pip install beautifulsoup4
2行目に出てきたbeautifulsoup4とはなんだとなったのではないでしょうか。
こちらもseleniumと同様のライブラリの一種となっており、
その役割としては、HTMLのやXMLから自分の欲しいデータを取ってくることです。
HTMLとはwebページを作るのに必要な言語のことで、実際に今回はHTMLから情報をピックアップしていくことになるのでbeautifulsoupをインストールする必要があるわけです。
beautifulsoupの「4」って何の数字?って思った方は鋭いですね。
この4という数字はbeautifulsoupのバージョンを表しており、いまのところ4が最新のバージョンとなっています。
バージョンの更新には敏感に反応してもらい、逐次アップデートしていくようにしていきましょう。
ライブラリのインポート・ファイルパスの指定
from selenium import webdriver
import time
import pandas as pd
browser = webdriver.Chrome(executable_path = 'chromedriver.exeのファイルパス')
browser.implicitly_wait(3)
こちらの解説はほとんど前回のコード解説と内容は変わりません。
1つだけみなさんに注意をしておくのだとすれば、
chromedriver.exeの入っているファイルパスを指定するときに、
chromedriver.exeまでキチンと入力するようにしてください。
おぎーは、このことを忘れ、chromedriver.exeの入っているファイル名までをファイルパスとして入力したところ、
permission errorが生じましたが、このミスに気が付くまでに少々時間がかかりました。
くれぐれもお気をつけて✋
指定したwebページを開く
url_login = "https://www.rakuten.co.jp/"
browser.get(url_login)
time.sleep(2)
print("access_success")
こちらのコードは前回のコードと何が違うかといえば、
url_loginのURLを楽天のホームページとしたことと、
time.sleepの時間を3秒ではなく2秒としたことです。
time.sleepの時間は、おぎーのパソコンで2秒でチャレンジして問題が生じなかったというだけなので、
もし問題が生じたならば、3秒に変更して行った方がよいかもしれません。
自動でクリックする
search_1 = browser.find_element_by_css_selector('#rnkDailyGenreLink_0_unlink > div > img')
time.sleep(2)
search_1.click()
print("realtime_select")
search_2 = browser.find_element_by_css_selector('#rnkGenreInfoUrlHasHistory')
time.sleep(2)
search_2.click()
print("realtimeranling_click")
こちらのコードはどちらもweb上でクリックしたいところをクリックをするためのコードです。
この構文はぜひ記憶にとどめておいてもらえると今後自動クリックを試みたいときに便利かもしれません。
クリックするとは言ってもクリックしたい場所を指定するためには、コンピュータにこの場所をクリックしろと指示しなければ上手くいくはずがありません。
したがって、クリックしたい場所をコンピュータに認識させる方法を今から説明させていただきます。
まず楽天のホームページをみなさんにChromeから開いてもらいましょうか。
そして右クリックしてください。
そしたら一番下に検証というボタンがあるのでクリックしましょう。
そしたら何やら新しい画面が出てきましたね。
画像右側のような画面が出てきたらオッケーです。
続いてその画面の左上にある矢印マークのボタンを押してもらいます。
押すとマークが青くなるのではないでしょうか。
青くなったら、楽天をwebページを下の方へスクロールすると出てくるリアルタイムボタンを左クリックして選択します。
ちょうどこの黄色のマーカーで囲んだあたりでクリックしてみてください。
そうすると右側の画面が変化し、青色で囲まれた文字のところがしっかりみえるように右側の画面を調整します。
そして、青色のところと矢印が重なったところで、右クリックし、
コピーを選択します。
コピーを選択すると、cssセレクタというキーワードが出てくるのでその項目を左クリックして、コピーします。
一番最初の行の2つのシングルクォーテーションの間にペーストします。
下のかたまりのコードでは、
さっき黄色で囲んだボタンの下にあるボタンのidを取得して、同じ構文のコードに当てはめただけです。
そのボタンはリアルタイムランキングという名前でランキングのページに移動することができるボタンです。
ここまでのコードを入力することができれば、
見事クリック動作の自動化が実現できます。
まとめ
今回は実際のクリック動作を自動化してみました。
人間がクリックした方が早いといった意見を抱いた方がいらっしゃると思いますが、膨大なデータを分析する際などは自動化した方がよい場合が多いです。
そのスタートとしてこのような学習は重要なので身に付けて頂けると幸いです。
今回使用したコードはGitHubの方へアップロードしておきますので、
ご自由にお使いください。
GitHubの使用法が分からなければ以下の記事を参考にしてください。
それではまた次回会いましょう。
おぎー