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 の中から 最初/最後のページ/奇数ページ/偶数ページなど