今回はpythonでseleniumを動かす方法を紹介します。
seleniumインストール
pip3 install selenium
webdriverダウンロード
公式サイト「ChromeDriver – WebDriver for Chrome – Downloads (chromium.org)」からインストールされたchromeバージョンにあっているファイルをダウンロードする
webdriverをpath環境変数に追加
省略
pythonでseleniumを使う
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
#driver=webdriver.Chrome(executable_path=’./chromedriver.exe’)
driver = webdriver.Chrome()
driver.get(“https://www.google.co.jp”)
driver.find_element_by_xpath(‘//input[@type=”text”]’).send_keys(‘phthon’)
driver.find_element_by_xpath(‘//input[@type=”text”]’).send_keys(Keys.ENTER)
time.sleep(5)
driver.quit()
要素の指定
find_element_by_~という関数が多くあり、要素の指定方法の違いにとって関数が分かれています。
xpath, id, cssSelecter, classNameなどいろいろな方法で取得できます。
driver.find_element_by_xpath(‘xpath’) | xpathで検索 ※find_elements_by_xpathは存在しない場合、空 |
driver.find_element_by_id(‘id’) | id属性で検索 |
driver.find_element_by_name(‘name’) | name属性で検索 |
driver.find_element_by_class_name(‘class’) | class属性で検索 |
driver.find_element_by_css_selector(‘css’) | CSS属性で検索 |
driver.find_element_by_link_text(‘link_text’) | link_text属性で検索 |
driver.find_element_by_partial_link_text(‘link_text’) | link_text属性で検索(部分一致) |
driver.find_element_by_tag_name(‘tag’) | タグで検索(複数の場合、一つ目となる) |
driver属性とメソッド
driver.page_source | |
dirver.current_url | |
dirver.close() | ブラウザのタブを閉じる |
driver.quit() | ブラウザを閉じる |
driver.forward() | |
driver.back() | |
driver.screen_shot(img_name) |
要素を操作する
send_keys() | その要素に対して、値を設定します。 |
click() | その要素をクリックします。 |
clear() | テキストを削除します。 |
text | textを取得します。 |
perform() | #Controlキーを押下しながらリンクをクリック actions = ActionChains(driver) actions.key_down(Keys.CONTROL) actions.click(element) actions.perform() |
要素の属性取得
element.get_attribute(‘href)
send_keysのキー一覧
Enterキー | Keys.ENTER |
タブキー | Keys.TAB |
←キー | Keys.LEFT |
→キー | Keys.RIGHT |
↑キー | Keys.UP |
↓キー | Keys.DOWN |
Deleteキー | Keys.DELETE |
HOMEキー | Keys.HOME |
ENDキー | Keys.END |
ESCAPEキー | Keys.ESCAPE |
イコール(=)入力 | Keys.EQUALS |
F1キー | Keys.F1 |
ページダウンキー | Keys.PAGE_DOWN |
ページアップキー | Keys.PAGE_UP |
スペースキー | Keys.SPACE |
リターンキー | Keys.RETURN |
Ctrlキー(通常キーと組み合わせ) | Keys.CONTROL,”a” |
ALTキー(通常キーと組み合わせ) | Keys.ALT,”f” |
シフトキー(通常キーと組み合わせ) | Keys.SHIFT,”abc”; |
seleniumでタブ切替
タブの切り替えは、Webdriverのswitch_to_window関数を利用します。
crt_windows = driver.window_handles
driver.switch_to.window(crt_windows[-1])
driver.switch_to.window(crt_windows[-1])
参考コード
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
#driver=webdriver.Chrome(executable_path=’./chromedriver.exe’)
driver = webdriver.Chrome()
driver.get(“https://www.google.co.jp”)
element = driver.find_element_by_link_text(‘Gmail’)
actions = ActionChains(driver)
actions.key_down(Keys.CONTROL)
actions.click(element)
actions.perform()
time.sleep(5)
wins = driver.window_handles
driver.switch_to.window(wins[-1])
time.sleep(5)
driver.quit()
seleniumでiframe切替
frameを変更するためには、Webdriverのswitch_to_frame関数を利用します。
frame = driver.find_elements_by_xpath(“//frame”)[2]
driver.switch_to.frame(frame)
#親フレームに戻る driver.switch_to.parent_frame()
driver.switch_to.frame(frame)
#親フレームに戻る driver.switch_to.parent_frame()
seleniumでcookie取得
driver.get_cookies()を実行すると、簡便にcookieを入手できます。
import time
from selenium import webdriver
#driver=webdriver.Chrome(executable_path=’./chromedriver.exe’)
driver = webdriver.Chrome()
driver.get(“https://www.google.co.jp”)
print(driver.get_cookies())
cookies = {data[‘name’]:data[‘value’] for data in driver.get_cookies()}
print(cookies)
time.sleep(5)
driver.quit()
seleniumでjsコード実行
import time
from selenium import webdriver
#driver=webdriver.Chrome(executable_path=’./chromedriver.exe’)
driver = webdriver.Chrome()
driver.get(“https://www.amazon.co.jp/”)
js = ‘scrollTo(0,500)’
driver.execute_script(js)
time.sleep(5)
driver.quit()
seleniumでwaitの方法
time.sleepによる待機
time.sleep(3)
implicitly_waitによる待機
要素が見つかるまでの間、時間指定で待機するimplicitly_waitを紹介します。
# 明示的な待機
driver.implicitly_wait(20)
driver.implicitly_wait(20)
untilによる待機
Webページのコンテンツを基準にして待機するuntilを紹介します。
from telnetlib import EC
from selenium import webdriver
import chromedriver_binary
# ChromeOptionsを設定
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
# Chromeを起動
driver = webdriver.Chrome()
# 指定したURLに遷移
driver.get(‘https://www.google.co.jp/’)
# 定義済みの条件で待機
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(By.NAME, “q”))
# 検索文字列を入力
search_bar = driver.find_element_by_name(“q”)
search_bar.send_keys(“Python wait”)
# 検索を実行
search_bar.submit()
# Chromeを終了
driver.quit()
ヘッドレスモード
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument(‘–headless’)
options.add_argument(‘–disable-gpu’)
#options.add_argument(‘–no-sandbox’)
driver = webdriver.Chrome(options=options)
driver.get(‘https://www.google.com/’)
print(driver.title)
driver.quit()
プロキシ設定
from selenium import webdriver
options = webdriver.ChromeOptions()
PROXY = ‘{proxy-server}:{port}’
PROXY_AUTH = ‘{userid}:{password}’
option.add_argument(‘–proxy-server=http://%s’ % PROXY)
option.add_argument(‘–proxy-auth=%s’ % PROXY_AUTH)
driver = webdriver.Chrome(options=options)
driver.get(‘https://www.google.com/’)
print(driver.title)
driver.quit()
UserAgentを変える
from selenium import webdriver
import random
options = webdriver.ChromeOptions()
user_agent = [‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36’,\
‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36’,\
‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36’,\
‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36’
]
options.add_argument(‘–user-agent=’ + user_agent[random.randrange(0, len(user_agent), 1)])
driver = webdriver.Chrome(options=options)
driver.get(‘https://www.google.com/’)
print(driver.title)
driver.quit()