Python Selenium (Grid) マウス操作メモ move_to_element,move_by_offset

python selenium マウス操作 ActionChains python

時々マウス操作をトレースし、ロボット判定しているサイトもあったりするので、マウスカーソル操作が出来るか調べてみました。Action系を使えばOKなようですが、思っていたのと違う・・・まぁ、マウスカーソル位置はOS側で制御する話だからSeleniumでやるのは厳しいのでしょうかね・・・(Docker Selenium Grid上の話でした)

スポンサーリンク

ActionChainsでマウス移動、クリックなど操作

Actionメソッドを呼ぶとキューに格納されていき、最後にperform()でキュー実行。

webdriveerを作って、ActionChainsにdriverを渡し、クリッカブルな要素(clickable)まで移動、1秒ポーズ、クリック、1秒ポーズ、abcを入力 という操作。HTMLにID=”clickable”があるタグが存在するページだとして。

※\はバックスラッシュ

from selenium.webdriver.common.action_chains import ActionChains

clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver)\
  .move_to_element(clickable)\
  .pause(1)\
  .click()\
  .pause(1)\
  .send_keys("abc")\
  .perform()
https://github.com/SeleniumHQ/seleniumhq.github.io/blob/trunk/examples/python/tests/actions_api/test_actions.py#L13-L20

マウス移動速度は効いている? VNC上ではカーソル移動していなかった

duration=250 が初期値。下記のように500としたり0としてみましたがマウスカーソルが目に見えて移動はしませんでした。dockerでselenium grid 2022-12バージョンで行っています。

act = ActionChains(driver)
act.w3c_actions.pointer_action._duration = 500

UltraVNCで画面遷移など見ていましたがカーソルはそもそも動かず

Docker Selenium Grid上のChromeだとmove_by_offset(x,y)で例外が発生する

カーソル移動はmove_by_offset(x,y)で出来るようです。現在位置からの相対位置。x=-100なら左に100移動、x=100なら右。y=100なら下に。

下記のようなメッセージが出て、カーソル位置の相対移動はできませんでした。

raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.MoveTargetOutOfBoundsException: Message: move target out of bounds

参考

Mouse actions
A representation of any pointer device for interacting with a web page.

コメント

タイトルとURLをコピーしました