【Python】PC上の操作を自動で行う(Selenium)
こんばんは。
Python始めてみてまだ1ヶ月弱くらいですが、
ブラウザ上で自身のアカウントにログインしてあれこれとできるようになりました。
結構便利で快適なのですが、ツールができたらできたで、もっとこうしたいという願望が湧いてくるので、引き続き改良していこうと思います。
で、その際にSlenium(セレニウム)というライブラリをガッツリ使用するので、今回はSeleniumについて書いてみようと思います。
Seleniumとは?
Webブラウザで行うクリック操作やキーボード入力などをプログラム上から自動で操作できるようにしたライブラリのこと
こちらの記事でも解説しているので参考にしてみて下さい。
■インストール
pip install selenium
■ドライバのインストール
Seleniumを使用するには、Google Chromeを操作するためにドライバ(ChromeDriver)が必要になります。(今回はGoogle Chromeを操作します)
ChromeDriverはこちらからダウンロードできます
(※ブラウザのバージョンと一致させる)
https://chromedriver.chromium.org/downloads
Macの場合はHomebrewでインストールすると、以下のコードで十分です。
brew install chromedriver
■使用方法
from selenium import webdriver
# CHromeが開く
driver = webdriver.Chrome()
よく使う操作メソッド
・キーボード入力を行う
driver.find_element_by_id("user_id").send_keys("アイウエオ")
user_id というID名を持つタグに対して「アイウエオ」という文字列を入力します
・テキストを取得
driver.find_element_by_id("user_id").text
・属性を取得する
driver.find_element_by_id("user_id").get_attribute("value")
ここでは、user_idというID名を持つタグのvalue値を取得しています
・タイトルを取得する
driver/title
・ページのソースを取得する
driver.page_source
要素を取得する
■ID属性で検索
driver.find_element_by_id("ここにID名を入力")
■class属性で検索
# classでの指定
driver.find_element_by_class_name("ここにクラス名を入力") ①
driver.find_elements_by_class_name("ここにクラス名を入力") ②
①は指定したクラス名を持つタグが複数存在した場合は、1番最初(1番上)のclassnameのみ取得します
②はelementsとなっているので、指定したクラス名を持つタグ全て=リストになります
リストなので、要素の個数を確認することができます。
len(driver.find_elements_by_class_name("fruits")))
つまり、存在チェックができます。
■name属性で検索
driver.find_element_by_name("ここにnameを入力") # 1番最初のnameのみ
driver.find_elements_by_name("ここにnameを入力") # name全て(リスト)
■タグ名で検索
driver.find_element_by_tag_name("button") # 1番最初のbuttonタグ
driver.find_elements_by_tag_name("button") # 全てのbuttonタグ(リスト)
■cssセレクタ構文で検索
driver.find_element_by_css_selector("p.title") #1番最初のpタグのtitleクラス
driver.find_elements_by_css_selector("p.title") #全てのpタグのtitleクラス(リスト)
■アンカータグのリンクテキストで検索
driver.find_element_by_link_text("aaa") #最初のhref="aaa.html"
driver.find_element_by_partial_link_text("aaa") #複数のhref="aaa.html"
■XPathで検索
※XPath:XML文書内のノードの位置を特定するために使用される言語
指定方法がCSSセレクタと比較して可読性が低いけど、その分柔軟な要素の指定ができます
・Xpathの記法はスラッシュで階層を区切るのが基本
・途中の階層を飛ばす場合はダブルスラッシュ
・属性はタグ名の後にカギカッコで括り、属性名に@をつけて指定する
例)//form[@id="logout"]/input[@name="name"]
liタグなど兄弟要素に複雑の要素が存在する場合は、インデックス番号で指定することも可能
<ul>
<li>list1</li>
<li>list2</li>
<li>list3</li>
<ul>
XPathで指定すると、(list2の場合)
//ul/li[2]
XPathのURLは、Google Chromeの検証モードでElementsの任意のタグを選択し、右クリック → Copy → Copy XPath をクリックすることで選択可能
要素の操作
■ある要素をクリック
driver.find_element_by_id("id").click()
■ある要素までスクロールする
element = driver.find_element_by_id("id")
actions = new Actions(driver)
actions.move_to_element(element)
actions.perform()
■特定のURLでブラウザを起動する
driver.get("URL")
■1つ前に戻る
driver.back()
■現在のURLを取得する
driver.forward()
■ブラウザを更新する
driver.refresh()
まだまだあるので、ちょこちょこ書き足していこうと思います。
最後まで見ていただき、ありがとうございました!
この記事が気に入ったらサポートをしてみませんか?