1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PythonでSeleniumを使ってみる

Posted at

##前書き

初投稿記事です。
Seleniumというものがあることを知り、使ってみろと言われたため
備忘録的に残しおておこうと思います。

##ゴール

・PythonとSeleniumのライブラリを使って自動でWebサイトを操作
・必要な情報をログとして保存

##準備物について

###使用するもの

・Python v3.7.7
・Selenium v4.0.0
・ChromeDriver 96.0.4664.45 (多分)

PythonもSeleniumもChromeDriverも触ったことがなかったので、それぞれの概要を以下にまとめます。

###〇Pythonとは

Pythonとはプログラム言語の事。
拡張性が高く、機械言語などで評価されている。

###〇Seleniumとは

Selenium(セレニウム)とは、ブラウザの操作を自動化するための物。
→このURLのこのボタン押して~みたいなことを自動で行ってくれる。

###〇ChromeDriverとは

プログラムとChrome(ブラウザ)をつなげる役割を果たすドライバー。
様々なドライバーがあるが、今回はchromeを使用する。

##準備(インストールなど)

###Seleniumのインストール

まずはSeleniumのライブリを落としてきましょう。

pip経由でインストールするのがよさそう

pip install selenium

###ChromeDriverのインストール

Googleで調べると出てきます。
使っているChromeのバージョンと合わせましょう。

ダウンロードしてきたchromedriver.exeの場所は控えておきましょう。後ほど使います。

###seleniumインストール時に怒られた

たまにcryptographyが~と怒られる時がありますが
そういう時は

python -m pip install --upgrade pip

でpipを更新してあげると解決するかもしれません。

##実践

###ブラウザの立ち上げ

早速Seleniumを使ってみます。
以下のようなコードを打ってみてください

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome("chromedriver.exeのPATH")
driver.get('https://qiita.com')
sleep(3)

driver.close()
driver.quit()

多分一瞬Qiitaのページが表示されて消えると思います。

それぞれなにをしているか解説していきましょう。

driver = webdriver.Chrome("chromedriver.exeのPATH")

ここでは、webdriverのインスタンスを生成しています。
インスタンス生成の引数として、ドライバーのパスを入れています。

※ドライバーのパスが通っていれば引数に指定する必要は無いみたいです。

driver.get('https://qiita.com')

getの引数にURLを入れると、そのURLを開きます。

sleep(3)

待機。

driver.close()
driver.quit()

それぞれ、開いたブラウザを閉じ、

インスタンスを終了する。という処理になります。

これがないとブラウザが開きっぱなしなので、
開きっぱなしは困るよ…という人は記載するといいと思います。

これでブラウザを立ち上げることはできましたね。

###ページ遷移と値取得

「ブラウザを開いたのはいいけど、何もできないよ…」

「コレじゃあテストもクソも無いやん!」

というワガママボーイズ・ガールズの声が聞こえてくるので、
ページ遷移する機能を追加してみます。

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(r"C:\driver\chromedriver\chromedriver.exe")

driver.get('https://qiita.com')

print('URLを開きました')

element = WebDriverWait(driver, 30).until(
	EC.visibility_of_element_located((By.CSS_SELECTOR, 'div.st-NewHeader_mainNavigation'))
)

mainNavigation = element.find_elements(By.CSS_SELECTOR, 'div.st-NewHeader_navigationTabContainer > a')
mainNavigation[1].click()

sleep(2)

driver.close()
driver.quit()

上記コードを実行すると、Qiitaの記事を開いた後、
「ホーム」から「タイムライン」に遷移するのでは無いでしょうか。

このコードのポイントは

element = WebDriverWait(driver, 30).until(
	EC.visibility_of_element_located((By.CSS_SELECTOR, 'div.st-NewHeader_mainNavigation'))
)
mainNavigation = element.find_elements(By.CSS_SELECTOR, 'div.st-NewHeader_navigationTabContainer > a')
mainNavigation[1].click()

です。

それぞれ、

element = WebDriverWait(driver, 30).until(
	EC.visibility_of_element_located((By.CSS_SELECTOR, 'div.st-NewHeader_mainNavigation'))
)

この記述でやっていることは、「div.st-NewHeader_mainNavigationという要素が出現するまで待つ」ということをやっています。

WebDriverWaitにドライバーとタイムアウトの秒数を記述しています。

untilの中身は待機するまでの条件を記載しています。

ECには沢山のプロパティがありますが、今回は.visibility_of_element_locatedを使用しています。コレは特定の要素が出現するまで待つという命令です。

この引数にはセレクターを指定します。

By.CSS_SELECTOR, 'div.st-NewHeader_mainNavigation'

という部分でセレクターを検索しています。

この書き方はいろんなところで使います。

で、要素が出現したら「element」にWebElementを入れています。

このWebElementというのは、

簡単に言うとSeleniumを用いてセレクター検索をした結果取得できる物

くらいに思っておいてください。

mainNavigation = element.find_elements(By.CSS_SELECTOR, 'div.st-NewHeader_navigationTabContainer > a')
mainNavigation[1].click()

ここでは先程のWebElementにfind_elementsというメソッドを用いて検索をかけています。

WebElementの中に該当のセレクターはあるかな。と検索しているわけです。

このセレクターはQiita上部のタブ群を指しています。

タブの中身は複数個あるため、検索結果が複数出てきます。

その中の一つを選択したいときは[1]をみたいな感じで指定することができます。

二行目では、取得したウェブエレメントの2つ目(1つ目)をClickしています。

ここは説明不要ですね。要素をクリックしております。

###まとめ

このようにSeleniumを使用します。

色々なメソッド、プロパティを使えば、いろいろなことができるので、
是非調べてみてください。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?