🐔

Seleniumの使い方 第5回 ActionChainの活用(python×Microsoft Edge)

に公開

こんにちは、星杜なぎさです
今回は、seleniumで文字入力やクリックを行う方法について学びます。

環境構築がまだの人は、以下の記事で準備してから本記事を読まれるとよいでしょう
https://zenn.dev/hoshinagi1219/articles/b61f220e0908c5

1. はじめに

  • Seleniumは、Webブラウザの操作を自動化するためのツール
  • オープンソースなので、無料で利用可能
  • WebスクレイピングやRPA(Robotic Process Automation)などに活用できる

1.1 この記事について

  • Seleniumでできることを端的に表したサンプルコードを記載した
  • Chromeを使用した例が(公式サイト含め)多かったため、Microsoft Edgeでの使い方をまとめる
    企業などの方針でChromeがインストールできない人でも大丈夫です!

1.2 対象読者

  • プログラム言語(特にpython)が多少読める、書ける
  • PCの基本操作(Drag and Dropなど)を知っている
  • Webブラウザの基本操作を知っている

1.3 動作環境

  • PC
    • OS:Windows 11 Home
  • python : 3.12.5
    • selenium : 4.31.0

2. とりあえず、動かしてみよう

selenium公式にWeb-formのサンプルサイトがあるため、これを使って手っ取り早く動作を確認できるサンプルプログラムを作成した
https://www.selenium.dev/selenium/web/web-form.html

2.1 プログラム実行時の様子

動いてる様子はこんな感じです

以下の操作を行っている

1.文字入力→全選択+コピー

  • Text Inputの要素をクリック(.onclick)
  • Text Inputに"ActionChainTest"と入力(send_keys)
  • ctrlボタンを押しっぱなしにする(key_down)
  • Aキーを入力(send_keys)
  • Cキーを入力(send_keys)
  • ctrlボタンを離す(key_up)
  • 上記一連の流れを実行する(perform)

2. ペースト

  • ctrlボタンを押しっぱなしにする(key_down)
  • Text Areaの要素にVキーを入力
  • (send_keys_to_element)
  • ctrlボタンを離す(key_up)
  • 上記一連の流れを実行する(perform)

3. スクロール

  • submitボタンの表示場所までスクロール(scroll_to_element)
  • 1秒待つ(pause)
  • 右に100だけスクロール(scroll_by_amount)
  • 1秒待つ(pause)
  • 上記一連の流れを実行する(perform)

4. マウス移動操作

  • xを-100から101まで50刻みで実行する
    • slider要素まで移動(move_to_element)
    • 要素を起点にxだけ移動(move_by_offset)
    • クリックする(click)
    • 上記一連の流れを実行する(perform)

2.2 プログラム例

from time import sleep
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

"""
ActionChainsの各種機能のチュートリアル
"""
SERVICE = Service("./edgedriver_win64/msedgedriver.exe")  # exeのPATH
TARGET_URL = "https://www.selenium.dev/selenium/web/web-form.html"

try:
    # 下準備(URLへアクセス、ウィンドウの最大化)
    driver = webdriver.Edge(service=SERVICE)
    driver.set_window_size(400, 400)  # windowサイズを設定
    driver.get(TARGET_URL)  # URLへアクセスする
    sleep(5)

    # 1.ctrl+A(全選択)とctrl+C(コピー)
    text_input = driver.find_element(By.ID, "my-text-id")
    ActionChains(driver).click(text_input)\
                        .send_keys("ActionChainTest")\
                        .key_down(Keys.CONTROL)\
                        .send_keys("A")\
                        .send_keys("C")\
                        .key_up(Keys.CONTROL)\
                        .perform()

    # 2.ctrl+V(ペースト)
    text_area = driver.find_element(By.TAG_NAME, "textarea")
    ActionChains(driver).key_down(Keys.CONTROL)\
                        .send_keys_to_element(text_area, "V")\
                        .key_up(Keys.CONTROL)\
                        .pause(1)\
                        .perform()

    # 3. scroll操作
    submit = driver.find_element(By.XPATH, "/html/body/main/div/form/div/div[2]/button")
    ActionChains(driver).scroll_to_element(submit)\
                        .pause(1)\
                        .scroll_by_amount(100, 0)\
                        .pause(1)\
                        .perform()

    # 4.スライダーをマウスで操作
    slider = driver.find_element(By.XPATH, "/html/body/main/div/form/div/div[3]/label[3]/input")
    for x in range(-100, 101, 50):
        ActionChains(driver, duration=500).move_to_element(slider)\
                                          .move_by_offset(xoffset=x, yoffset=0)\
                                          .click()\
                                          .perform()
finally:
    driver.quit()

print("conplete run!!")

2.3 ActionChainsとは?

ActionChainsは、マウスの動きやボタンの操作、キー入力、コンテキストメニューの操作といった低レベルのインタラクションを自動化する方法です。
ホバーオーバーやD&D(ドラックアンドドロップ)のような複雑な操作を行うことができる。
ActionChainsオブジェクトのメソッドを呼び出すと、その操作はActionChainsオブジェクト内のキューに記録・保存されます。
.perform()を呼び出すと、キューに保存された順序で実行される。
そのため、下記のようにメソッドチェーンを活用した書き方ができる。

# ショートカットのペースト(ctrl+V)を実行するコード
ActionChains(driver).key_down(Keys.CONTROL).send_keys("V").key_up(Keys.CONTROL).perform()

3. まとめ

  • 一連の動作を連続で行うActionChainsについて、動かして学べるプログラムを作成した
  • ctrlやshiftなど特殊キーを使用した操作やマウススクロール、ダブルクリックなどもできるため、かなり使えると感じた

参考URL

Discussion