4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

python Selenium 覚書 ActionChains他

Posted at

ActionChains, クリック, マウス操作をまとめてみた

色々やっていて、わからなくなってきそうなのでまとめて置いておきます

1.普通のクリック
2.普通のクリック その2
3.普通のクリックが効かない時(紐づいてるスクリプトを実行)
4.同じ名前の要素がある- 2つ目をクリック
5.要素下にある- 1番目を選択(クリック)
6.要素はあるのにクリックできない(エラーを起こす)
7.マウスオーバー マウスが上に来ると表示など
8.ActionChains (キー送信、マウス操作など)
9.その他
10.ホイール ドラッグ ちょっとずらしたところをクリック等

※ざっくりと必要なものだけを記述

from selenium.webdriver import ActionChains
from selenium.webdriver.common.actions.wheel_input import ScrollOrigin


#普通のクリック
#---------------------------------------------------------------------------
driver.find_element(By.ID,'showSettingPanel').click()


#普通のクリック その2
#---------------------------------------------------------------------------
vi=driver.find_element(By.ID,'viewer')
vi.click()


#普通のクリックが効かない時(紐づいてるスクリプトを実行)
#---------------------------------------------------------------------------
btn=driver.find_element(By.CLASS_NAME,'xxxBtn')
driver.execute_script('arguments[0].click();', btn)


#同じ名前の要素がある- 2つ目をクリック
#---------------------------------------------------------------------------
elems=driver.find_elements(By.CLASS_NAME,'ageCheck__btn')
elems[1].click()


#要素下にある- 1番目を選択(クリック)
#要素:setting type="radio"
#個々のIDなどは違うが、ラジオボタンなのでクリックできる
#---------------------------------------------------------------------------
btn=sp.find_elements(By.ID,'setting')
btn[0].click()


#要素はあるのにクリックできない(エラーを起こす)
#隠れている要素を表示。クリックすると、menuが出てくる処理
#---------------------------------------------------------------------------
menu=driver.find_element(By.ID,'menu') #menuを取得
menuD=menu.is_displayed()              #menuが表示されていれば Trueを返す
if menuD == False:
   vi=driver.find_element(By.ID,'viewer')
   vi.click()

#menuを表示。配下の要素を操作できる


#マウスオーバー マウスが上に来ると表示など
#---------------------------------------------------------------------------
hover=driver.find_element(By.CLASS_NAME,'menu')
ActionChains(driver).move_to_element(hover).perform()

マウスオーバーをされてるかどうかは、マウスオーバー時に要素が変更されることがあるので
その要素を取得して確認 #その他参照


#ActionChains (キー送信、マウス操作など)
キーを押したら次/前ページ等の移動を再現
---------------------------------------------------------------------------
act = ActionChains(driver)
act.key_down(Keys.LEFT)    #カーソル左
act.perform()              #実行する

上記でうまくいかないとき、確実にキーを送りたい
---------------------------------------------------------------------------
vi=driver.find_element(By.ID,'viewer')
ActionChains(driver).move_to_element(vi).send_keys(Keys.LEFT).perform()

※例)vi 要素名viewerは、この場合の親要素。

クリック、キーイベントについては、発生する要素を選択して行う
FireFoxのデベロッパーモードで、インスペクターの画面で
<div xxx> event(クリック) で確認できます。

該当する要素は、親の要素を選択すれば、動きます


#その他
Classが動作によって変更される、それを取得したい
----------------------------------------------------------------------
<div id="viewport0" class="kokogakawaru" style="position: absolute; left: 0px; top: 0px; width: 100%; height: 100%; visibility: visible; z-index: 0; display: block; overflow: hidden;">
---------------------------------------------------------------------------
viw0=driver.find_element(By.ID,'viewport0')
vclass=viw0.get_attribute('Class') #"kokogakawaru"
vstyle=viw0.get_attribute('style')  #style


css styleを取りたい
---------------------------------------------------------------------------
load_check=driver.find_elements(By.CLASS_NAME,'loading') 
for style in load_check:
    s_w = style.value_of_css_property('Width')
    s_h = style.value_of_css_property('Height')
    s_v = style.value_of_css_property('Visibility')


Selenium 4.18.1 documentation
https://www.selenium.dev/selenium/docs/api/py/index.html

#ActionChains クリック マウスホイール
from selenium.webdriver import ActionChains
from selenium.webdriver.common.actions.wheel_input import ScrollOrigin

#マウス操作色々 電子書籍などのページ移動に使う(ページ送り)
ダブルクリック
---------------------------------------------------------------------------
ActionChains(driver).double_click(vi).perform()

#マウス操作(でページ移動色々)
ホイール下(ビューポートの左上隅を原点として、にスクロール)
---------------------------------------------------------------------------
ActionChains(driver).scroll_by_amount(0, 50).perform()

ホイール上
---------------------------------------------------------------------------
ActionChains(driver).scroll_by_amount(0, -50).perform()
---------------------------------------------------------------------------

ホイール()scroll_originの場所を中心としてスクロール
---------------------------------------------------------------------------
scroll_origin = ScrollOrigin.from_element(vi, 0 0)
ActionChains(driver).scroll_from_origin(scroll_origin, 0, 200).perform()
---------------------------------------------------------------------------

ちょい左クリック
---------------------------------------------------------------------------
vi=driver.find_element(By.ID,'viewer')
ActionChains(driver).move_to_element_with_offset(vi, -200,0).click().perform()

ちょい右クリック
---------------------------------------------------------------------------
vi=driver.find_element(By.ID,'viewer')
ActionChains(driver).move_to_element_with_offset(vi, 200, 0).click().perform()

右にドラッグアンドドロップ(マウスボタンを押したまま、右に動かして離す)
---------------------------------------------------------------------------
vi=driver.find_element(By.ID,'viewer')
ActionChains(driver).drag_and_drop_by_offset(vi, 100, 0).perform()

左にドラッグアンドドロップ(マウスボタンを押したまま、左に動かして離す)
---------------------------------------------------------------------------
vi=driver.find_element(By.ID,'viewer')
ActionChains(driver).drag_and_drop_by_offset(vi, -100, 0).perform()

※マウス操作色々 電子書籍などのページ移動に使う(ページ送り)
現在のページの情報を知りたい時などは9.その他を参照
例えば、style, class の中から 最初/最後のページ/奇数ページ/偶数ページなど

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?