Pythonでseleniumを動かす

selenium

今回は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])

参考コード

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()

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)

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()
タイトルとURLをコピーしました