Seleniumを使用してスクレイピングを行っている場合に、javascriptで動的に作成されているページに遭遇します。
そのような場合に、javascriptを実行する方法について記載します。
目次
1.SeleniumからJavascriptを実行する方法
Seleniumからjavascriptを実行する場合には以下のようにexecute_script()メソッドを使用することで実行することができます。
driver.execute_script('JavaScriptのコード')
のような形で実行します。
たとえば、
width = driver.execute_script('return document.body.scrollWidth') #ページ幅を取得
height = driver.execute_script('return document.body.scrollHeight') #ページ高さを取得
のようにすることで該当ページの幅や高さを取得できます。
同様に、
driver.execute_script("arguments[0].setAttribute('style','color: red;')", element)
することで該当のelement要素の色を変更できます。
2.実行例
実行例としては、たとえば以下のようにすることで、
Google検索画面を開き検索窓に「abc」と打ち、print文でコンソール上にページ幅と高さを印字したのち入力した「abc」を赤色に変更して検索実行して閉じます。
(SeleniumVer.4.6以前の場合:同じフォルダ内にchromedriver.exeを入れて実行)
from selenium import webdriver
from selenium.webdriver.chrome import service as fs
import os
from selenium.webdriver.common.by import By
path_driver = os.getcwd()+'\chromedriver.exe'
# ドライバー指定でChromeブラウザを開く
chrome_service = fs.Service(executable_path=path_driver)
driver = webdriver.Chrome(service=chrome_service)
driver.get('https://www.google.com/')
element = driver.find_element(By.NAME, "q")
#検索テキストボックスに"abc"を入力
element.send_keys("abc")
#ページ幅を取得
width = driver.execute_script('return document.body.scrollWidth')
#ページ高さを取得
height = driver.execute_script('return document.body.scrollHeight')
print(width,height)
driver.execute_script("arguments[0].setAttribute('style','color: red;')", element)
element.submit()
# タブを閉じる
driver.close()
driver.quit()
SeleniumVer.4.6以降の場合はwebdriver指定が変わるため以下のような内容にして実行します。
(SeleniumVer.4.6以降の場合)
from selenium import webdriver
from selenium.webdriver.common.by import By
# ドライバー指定でChromeブラウザを開く
driver = webdriver.Chrome()
driver.get('https://www.google.com/')
element = driver.find_element(By.NAME, "q")
#検索テキストボックスに"abc"を入力
element.send_keys("abc")
#ページ幅を取得
width = driver.execute_script('return document.body.scrollWidth')
#ページ高さを取得
height = driver.execute_script('return document.body.scrollHeight')
print(width,height)
driver.execute_script("arguments[0].setAttribute('style','color: red;')", element)
element.submit()
# タブを閉じる
driver.close()
driver.quit()
以上が、PythonでSeleniumを利用してスクレイピングをする場合にJavascriptを実行する方法になります。