Django Girls and Boys 備忘録

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

【Python Selenium】SeleniumでJavaScriptを操作する方法

 

ウェブサイトからデータをスクレイピングする場合、PythonSeleniumの組み合わせは 便利です。

Seleniumはウェブブラウザでの操作を自動化するための強力なツールです。

今回は、PythonSeleniumを使用してウェブサイトをスクレイピングする際にJavascriptを活用する事例について説明します。

 

 

目次

 

 

1.Javascriptを操作する書式

 

Seleniumからjavascriptを操作する場合には以下のような書式で記載します。

(driver:Webドライバー設定)

 

'some javascript code here'の箇所にJavascriptのコマンドを記載します。

 

driver.execute_script('some javascript code here');

 

 

2.使用例

 

実際にこれを活用した例としては、たとえば以下のようなものがあります。

SeleniumのVer.4.6以降の場合の書式)

 

from selenium import webdriver
from selenium.webdriver.common.by import By

#ドライバー用パスの設定
driver = webdriver.Chrome()

# Googleの検索結果ページにアクセス
driver.get("https://www.google.com")

# 検索ボックスにキーワードを入力
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Python scraping with JavaScript")

# 検索ボタンをクリック
search_box.submit()

# JavaScriptを実行してウインドウを縦方向にスクロール
driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')

# ブラウザを閉じる
driver.quit()

 

この例では、Chrome用のWwebドライバーを設定した後、Google検索画面を開き、キーワード入力後にJavascriptを実行しています。

 

Javascriptでは、ウインドウを縦方向にスクロールしています。

 

また、Javascriptを操作することで動的なコンテンツやインタラクティブな要素も取得することが可能です。ぜひ、PythonとSeleniumwo 活用して、様々なウェブサイトからスクレイピングしてみてください。

 

【Python Selenium】新規ウインドウ(新規タブ)追加時のウインドウ切替方法(追加ハンドルをハンドル差異比較にて取得)(SeleniumVer4.6以降)

Seleniumを使用してスクレイピングしている場合の話ですが、ウェブドライバーから見て新規ウインドウが追加になった時に、新しいウインドウハンドルは必ずしもブラウザのドライバのハンドル(window_handles)の末尾に追加されるわけではないようです。

続きを読む

【Python Selenium】新規ウインドウ追加時のウインドウ切替方法

 

 

PythonSeleniumを使用してWebサイトへのアクセスをする場合に必要になってくる機能の1つにウインドウの遷移(切替)があります。

 

Webサイト上でボタンなどをクリックした時に新規ウインドウが別タブ、別ウインドウとして開いた時は、自driverが操作できるウインドウハンドルを切替えてやらなければなりません。

続きを読む

【Python Selenium】ウインドウハンドル取得方法(使用例:Chrome用、SeleniumVer4.6以降)


今回は、Python、seleniumでのウインドウハンドル取得方法についての説明になります。

 

ウインドウハンドルとはウインドウごとに割り当てられている識別情報のことですが、seleniumでは、ウインドウの切替を行う場合には、この番号を使用して、switch_to_window(ウインドウハンドル)とすることで、制御対象のウインドウの切替を行います。

 

簡単な使用例として載せているものは、Chrome用になります。

 

続きを読む

【Python Selenium】URL指定の画面展開方法とウインドウのURLとタイトルの取得方法(Chrome用)(SeleniumVer4.6以降)


Pythonでseleniumを利用してウインドウアクセスする場合には、まずは、対象のウインドウを表示させるところからはじまります。

ということで、今回は、対象のウインドウのURLからウインドウの表示のさせ方とその後のウインドウのURLとタイトル取得方法についての内容になります。

 

簡単な使用例として載せているものは、Chrome用になります。

 

尚、Seleniumのバージョンアップでウェブドライバーの設定方法が変わったこともあり、以下の例はSelenium Ver.4.6以降の場合の例として記載しています。

 

 Ver.4.6以前の場合については以下の過去記事などで載せています。

違いはドライバーの設定方法だけですが。

 

kuku81kuku81.hatenablog.com

 

 

続きを読む

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