Seleniumを使ってGoogle検索 ~ サイトの巡回までをプログラムする

この記事について

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

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

例えばこちら。

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

代替テキスト

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

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

代替テキスト

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())を忘れない。
  • 悪用しない。

公式のメソッドリスト

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

メソッドリスト

すごくわかりやすい動画

代替テキスト

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

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

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

Kotaro
Kotaro
服部 洸太郎
音大を卒業後ピアニストとして活動。
自身のピアノトリオで活動後北欧スウェーデンにてシンガーアーティストLindha Kallerdahlと声帯とピアノによる即興哲学を研究。
その後ドイツへ渡りケルンにてAchim Tangと共に作品制作。
帰国後、金田式電流伝送DC録音の名手:五島昭彦氏のスタジオ「タイムマシンレコード」にアシスタントとして弟子入りし、録音エンジニアとしての活動開始。
独立後、音楽レーベル「芸術工房Pinocoa(現在はKotaro Studioに統合)」を立ち上げ、タンゴやクラシックなどのアコースティック音楽作品を多数プロデュース。
その後、秋山庄太郎氏後継の写真スタジオ「村上アーカイブス」でサウンドデザイナー兼音響担当として映像制作チームに参加。
村上宏治氏の元で本格的に写真、映像技術を学ぶ。
祖父母の在宅介護をきっかけにプログラムの世界に興味を持ち、介護で使えるプログラムをM5Stackを使って自作。
株式会社 ジオセンスの代表取締役社長:小林一英氏よりプログラムを学ぶ。
現在はKotaro Studioにてアルゼンチンタンゴをはじめとした民族音楽に関する文化の研究、ピアノ音響、さらに432hz周波数を使った癒しのサウンドを研究中。
2022年9月より豊かな暮らしをテーマとしたウェブサイト『レンタルdeクラセル』も発信中〜