KOSEN{BLOG}について

PythonとSeleniumでスクレイピング

はじめに

ある日、ふと、自動購入Botって自分でも作れるのか疑問に思いつくろうとあがいてみました。

調べていくとPythonが簡単っぽかったので挑戦しました。

自動でブラウザを操作する為のライブラリであるSelenium を使いブラウザを操作したので、まとめておこうと思います。

Youtubeで簡単に環境構築を説明しました。

よかったらコメントやチャンネル登録お願いします。

環境

  • Python3
  • selenium
  • Windows10
  • Google Chrome

セットアップ

Pythonの環境構築

以下の記事を参考にしてください。

Python環境構築-VScode-win10

Seleniumのインストール

コマンドプロンプトを開き、pipでseleniumをインストールします。

pip install selenium

ブラウザに合わせたドライバーを用意する

ブラウザを操作するには、各ブラウザに合わせてドライバーを用意する必要があります。
chromeならchromeの、FirefoxならFirefox専用のドライバーが必要になります。

今回は Chrome を使用するので 公式サイトから Chromedriver をダウンロードします。

CAUTION
ドライバーだけでは動かないので
chrome(ブラウザ)が入ってない方はブラウザも入れておいてください。
また、ドライバーとブラウザのバージョンが違うと動作しないので気をつけてください


下図はドライバーの公式サイトで、赤で囲んだところがバージョンです。


下図はブラウザのバージョンです。
確認方法は、ブラウザのツールバーにあるメニュー をクリックし
「ヘルプ」 から「Google Chromeについて」を選択するとできます。


次に、ダウンロードしたzipファイルを解凍します。

適当な場所にzipの中にあるexeファイルを置く。
(C:\Program Files\chromedriver 的な感じで)

「環境変数を編集」(Winキーを押して「環境変数を編集」と検索すれば出てきます)
を実行し、「Path」に上記のフォルダを追加します。

最後にコマンドプロンプトで 「chromedriver」 とコマンドを実行して、起動できればOKです。
以下は出力になります。

C:\Users\username>chromedriver
Starting ChromeDriver 80.0.3987.106 (f68069574609230cf9b635cd784cfb1bf81bb53a-refs/branch-heads/3987@{#882}) on port 9515
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.

使ってみる

適当なフォルダを作り適当な名前.pyのファイルを作ります。 C:\Users\username\Desktop\python\practice.py 的な感じで作りました。

WEBページを開く

・ブラウザを開く
 先ほどPathは通したので()の中は空白で大丈夫です。

webdriver.Chrome(driver_path) 

・webページを開く

driver.get('URL') 

・webページを閉じる

driver.close() 

・ブラウザを終了 (全てのウィンドウを閉じる)

driver.quit() 

例としてGoogleのトップページを開いて閉じるだけのコードを下に書きました。

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.google.co.jp')
driver.quit()

HTMLの要素にアクセス

id、class、xpath 等HTMLの要素にアクセスするために要素を指定して取得する必要があります。
取得することで後述するクリックなどの操作を行います。 参考資料

HTMLの要素については以下の記事で紹介しています。

HTMLの要素を見つける

・id

driver.find_element_by_id('ID')

・class

driver.find_element_by_class_name('CLASS_NAME')

・name

driver.find_element_by_name('NAME')

・xpath

driver.find_elements_by_xpath(".//a")

クリックなどのアクション

webページを操作するためのアクションです。

・ボタンをクリックする

driver.find_element_by_id('Btn').click()

・Form に文字を入力する

driver.find_element_by_name('From').send_keys("text")

・スクリーンショットをとる

driver.save_screenshot('filename.png')
CAUTION
他にもたくさんありますがここでは割愛します。
自動購入Botで使用したものは次の記事で紹介します。

例としてGoogleのトップページに行き、
「selenium」というキーワードで検索して、その後ブラウザを閉じるコードを下に書きます。

検索画面のHTMLの要素がわからないとアクション出来ません。
要素はchromeのデベロッパーツールで確認できます。
入力フォームのHTMLは下記のようになってます。今回はname属性でアクションさせました。

以下がコードです。

 

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.google.co.jp')
driver.find_element_by_name("q").send_keys('selenium')
driver.find_element_by_name("q").submit()
driver.save_screenshot('Google.png')
driver.quit()

 

スクリーンショットがちゃんと撮れてました!

さいごに

WEBページの自動操作ができるようになりました。
基本動作をもとに自動購入Botを作ってみたいと思います。

次の記事で書きます。

また、書籍を買って実践していくとよりいいものができるかもですね。

一応試作ではなく完成まで作ったので記事を以下に載せてます。
(完成系のコードもあります。)

自動購入Bot完成まで

無料でPythonが学ぶオススメ講座

techgym(テックジム)というプログラミングスクールが初心者向けに週4で無料講座を開いてくれています。

プログラミングの勉強法などから教えてくれます。

直接的に自動購入Botのことやスクレイピングについては学べませんが、

Pythonの基礎が学べるので第一歩としておすすめします。

また、参加後には講座についていけなかったり復習したい方向けに解説動画ももらえます

Python勉強してみたいなーと思っている方は一度参加してみてはいかがでしょうか?

テックジムのサイトはこちら

以下の記事で詳しく書いてみたのでよかったら覗いてみてください。

【無料】ゼロからPython学習したいなら「テックジム」がおすすめ!

7 COMMENTS

はなだるま

購入させて頂いた者ですが、初心者でことが多く質問させてください。
環境変数のPathを追加したんですが、
chromedriverをダウンロードして記載されているコマンドプロンプトをコピペして実行するのですが、エラーがでます。
恐らく記載されているのchromedriverのバージョンが違うと思うので、数値を変えてみたのですが、エラーが出ます。
ここでつまづくと、この先、入力しても実行できないですよね?
宜しくお願い致します。

返信する
816

まったくの初心者で、こちらの記事を見ながらまったりやっていこうと思っていますが、ほかの方が質問されているようにchromedriverをコマンドプロンプトに入力してもエラーになってしまいました。ご助言いただければ幸いです。

返信する
こうせ

コメントありがとうございます。
ここにコメントされているはなだるまさんは記事を修正する前でコマンド入力をミスっていたものでした。
初心者ということなので言っておきますが、エラーの際はどこまでやったのか、どんなエラーがでたのかなどを教えていただけると回答がしやすいです。
よろしくお願いいたします。

返信する
よじ

初めまして。VS Codeの部分実行はどのように設定されておりますでしょうか(拡張機能でしょうか)。
よろしければお伺いできればと思います。

返信する
こうせ

おそらくですが、Jupyterlabのことだと思います。
一つ一つ実行できるのでとても便利です。
調べてみてください。簡単に実装できるはずです。

返信する
匿名

Selenium動かなくて困ってたここに辿り着き
この記事どうりしてみたところ動きました。ありがとうございます。

返信する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です