Seleniumを使ってGoogle検索 ~ サイトを自動巡回させるプログラム

最終更新日

この記事について

ウェブサイトの巡回などをプログラムで自動制御することができます。
プレゼンテーションとしても非常に重宝しますし、高齢者の在宅介護などで各種動画サイトで視聴プログラムを組んであげることもできるので便利ですね。

Python + Seleniumで様々なウェブサイトの動作を自動化させることができます。

例えばこちら。

大好きなYoutubeチャンネルを操作することなく、視聴するためのプログラムです。

Seleniumを使うためのWebDriverの準備などもこちらのページで紹介していますので参照してください。

Seleniumを使ってYoutube動画を自動再生するテスト

icon image

Pythonの環境構築がまだの方はこちらの記事で完了しますので参照してください。

M1 Mac以降の Python 環境構築 [完全保存版]

importから基本操作まで

from selenium import webdriver
from time import sleep
import random

seleniumをインポートし、Sleep機能もインポートしておきましょう。

ウェブサイトの読み込み時間等を考慮する必要がありますので、2〜3秒想定しておかなければいけません。

ウェブサイトの読み込みと次の処理が間に合わない場合はエラーとなります。

driverが操作するブラウザを指定する

#Chromeを操作
driver = webdriver.Chrome()

#Firefoxを操作
driver = webdriver.Firefox()

Google Chromeだけでなく、Firefoxも同じように操作可能です。

webdriverはPATHの通っている場所に配置するようにしてくださいね。

ちなみにFirefoxといえば、開発にRustが使われていることで有名です。

【環境構築】Rust M1 Mac

Rust とは? 特徴や将来性

よく使うアクションのまとめ

Seleniumはブラウザの操作に使うだけですから操作内容はそんなに多くないかと思います。

好きなウェブサイトを見る時に普段私たちが使っている動作でよく使いそうなものだけまとめておきます。

特定のサイトに訪問する

get関数を使用します。

driver.get("https://kotarohattori.com")

仮にKotaro Studioのアドレスを貼っています。

特定の文字のリンクをクリックする

link = driver.find_element_by_link_text("M1 Mac以降の Python 環境構築 [完全保存版]")
link.click()

当サイトの人気の記事一覧に出てくる記事のタイトルを入れています。

タイトルが決まっている場合はそのまま正確に入力してください。

link.click()

でそのリンクをクリックさせることができます。

Googleの検索エンジンで特定の文字を検索する

Googleで検索する方法はまず先述のget関数で検索エンジンのトップを表示させます。

driver.get("https://www.google.com/")

次に検索エンジンのボックス要素を指定します。

search = driver.find_element_by_name('q') 

指定したら検索したいワードを入力します。

search.send_keys('DPA4006 ピアノ')

例えば当サイトが検索順位1位(2022年3月時点)を獲得しているDPA4006 ピアノ でテストしてみています。

入力したら検索ボタンをクリックさせます。

search.send_keys(Keys.RETURN)

今回はリターンキーを指定していますが、こちらは任意のキーをアサインすることができます。

#以降で使用するelementを生成
element = driver.find_element_by_tag_name('タグ名')

#入力する <input>など
element.send_keys('入力したい文')

#入力を消す <input>など
element.clear()

#送信 <form>など
element.submit()

検索結果から自動で任意のアドレスをクリック(要素の抽出)

さて、検索結果が出たら、さらにその結果の中から自動でクリックして移動しましょう。

link = driver.find_element_by_class_name("yuRUbf")

yuRUbfはDPA4006 音質チェックという記事のIDになります。

デベロッパーツールを開く(ショートカット)

Shift + Command + C

Option + Command + I

いちいちタブから開いていると要素の抽出に時間がかかりますので、基本的にはショートカットで開くようにしてください。

IDの抽出はデベロッパーツールを使用します。

右上のメニュー画面からデベロッパーツールを表示させます。

Seleniumを使用する際はほとんどの操作でこのデベロッパーツールを使いますので、ショートカットで覚えておきましょう。

Mac キーボードから素早くターミナル起動

デベロッパーツールを出したらこの矢印のボタンを押せば要素をハイライトしてくれるようになります。

こんな感じでハイライトになります。

ハイライトで指定した状態でデベロッパーツールを見ると、全体を俯瞰で見ることができるので、要素を抽出してください。

筆者の記事のケースだとIDはここに表示されています。

各要素の抽出メソッド

もちろん各要素はIDじゃなくてもOKです。

ウェブサイトによって最適な要素を選択し、クリックしてください。

デベロッパーツールで各要素は全体をクリック(右)しタブを出してコピーから要素を指定してコピーできます。

#タグ名で検索
element = driver.find_element_by_tag_name('tag_name')

#タグ名で検索(子要素を指定)
element = driver.find_element_by_tag_name('div>a)

#クラス名で検索
element = driver.find_element_by_class_name('class_name')

#idで検索
element = driver.find_element_by_id('id')

#name属性で検索
element = driver.find_element_by_name('name_attr')

#xpathで検索
element = driver.find_element_by_xpath('xpath')

#cssセレクタで検索
element = driver.find_element_by_css_selector('css_selector')

#リンクのテキストで検索
element = driver.find_element_by_link_text('sign in')

#リンクのテキスト部分一致での検索
element = driver.find_element_by_partial_link_text('sign in')

ブラウザを終了させる

driver.quit

で対象のドライバーを終了させることができます。

ここまでの動作でのサンプルコード

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
#ランダムを使うとより人間っぽく動作します。
import random
#ランダムを定義してください。
waitsec=random.randint(5,30)
viewsec=random.randint(30, 300)

PATH = 'PATHが通っている任意の場所'
driver = webdriver.Chrome(PATH)
driver.get('https://www.google.com/') 
search = driver.find_element_by_name('q')   
search.send_keys('DPA4006 ピアノ')
search.send_keys(Keys.RETURN)
sleep(4)
driver.implicitly_wait(10)
link = driver.find_element_by_class_name("yuRUbf")
link.click()
sleep(viewsec)
link = driver.find_element_by_link_text("ペーパーハウス 挿入歌〜Bella ciao ピアノソロアレンジ")
link.click()
sleep(viewsec)
link = driver.find_element_by_link_text("【最新2022年版】アルゼンチンの物価と暮らしのポイント")
link.click()
sleep(viewsec)
link = driver.find_element_by_link_text("21世紀の人気美人ピアニスト達 7人")
link.click()
sleep(viewsec)
sleep(2)
driver.quit
print("お疲れ様でした。")

さて、これで、Googleの検索画面から、「DPA4006 ピアノ」と検索して、出てきた検索結果から当サイトの「DPA4006 音質チェック」の記事をクリックし、サイドバーのよく読まれる記事から人気の記事の指定されたタイトルをクリックするプログラムができました。

各記事のリーディング時間はそれぞれ、viewsecでランダム定義されています。

もちろんランダムにしない場合はそのままsleepを使用するか、driver.implicitly_wait(10)を使用してください。

戻る / 進む

#戻る
driver.back()
#進む
driver.forward()

まとめ

  • デベロッパーツールを駆使して要素をしっかり抽出する。
  • 右クリック(link.click())を忘れない。
  • 悪用しない。

公式のメソッドリスト

公式のリストをリンクしておきます。

メソッドリスト

すごくわかりやすい動画

icon image

こちらのYoutuberさんの動画ではかなりわかりやすく解説してくれていますので参考にしてみてください。
ウェブサイトを使ったプレゼンテーションなどには原稿の時間などを合わせて構成すれば大活躍しそうですよね。

こちらの記事もいかがですか?
プログラミングやテクノロジーに関する記事をまとめています!

icon image
当スタジオでのアクセスNO1!
Google検索ランキングで1位獲得実績ありの人気記事!
M1 Mac以降の Python 環境構築 [完全保存版] ほぼ英語クラスの馴染みやすさが人気のPythonの全体像をほぼ1記事で理解できるのはこれ! まずはこれだけ Python基礎からサンプルプログラム いつもチェックする日課の記事やサイト、ページなどがあればセレニウムを使用してかなり細かく動作を自動化することができます。 Seleniumを使ってGoogle検索 ~ サイトの巡回までをプログラム Xサーバーをモデルにしています。
APIで自動トレードシステムなんかを構築したい場合は24時間働き続けてくれるスタイルが必須ですよね。
Xserver SSH接続の設定とAnaconda3のインストール
ポイント当サイトもエックスサーバーで構築しています。
速度が早いのと対応も丁寧で老舗なのでおすすめのサーバーの一つです。
サーバーをこれから開設する方は是非VPNも契約しておきましょう。
レンタルサーバー エックスサーバー コンパイル言語も忘れないで!
少し知っているだけで見える世界が全然変わってきます。
【環境構築】Rust M1 Mac / コンパイル言語