python Selenium 覚書 ActionChains他

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