Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Python スクレイピング】SeleniumでJavascriptを実行する方法

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を実行する方法になります。