Seleniumのチートシート

Seleniumのチートシートをまとめてみた。

#####ライブラリのインポート、ドライバ・ブラウザの開始

```Python
#1.ライブラリのインポート
from selenium import webdriver

#2.ウェブドライバを開始する
# Chromeの場合
chromedriver = "C:/tests/chromedriver.exe"
driver = webdriver.Chrome(executable_path = chromedriver)
# Firefoxの場合
geckodriver = "C:/tests/geckodriver.exe"
driver = webdriver.Firefox(executable_path = geckodriver)
# Internet Explorerの場合
iedriver = "C:/tests/IEDriverServer.exe"
driver = webdriver.Firefox(executable_path = iedriver)
# Safariの場合(Safariの場合、ドライバがブラウザに組み込まれている)
driver = webdriver.Safari()

#3.ウェブサイトを開く
the_url = "https://example.com"
driver.get(the_url)
```

#####ウェブサイトの要素取得

```Python
#4.要素(element)を検索する
# 例、下記要素を探す場合
<a href="/sign-up" id="register" name="register" class="cta nav-link">Sign Up</a>path)
# ID要素を探す
the_id = 'register'
element = driver.find_element_by_id(the_id)
# 名前で要素を探す
the_name = 'register'
element = driver.find_element_by_id(the_name)
# クラス名で要素を探す
the_class_name = 'nav-link'
element = driver.find_element_by_class_name(the_class_name)
# Tag名で要素を探す
the_tag_name = 'a'
element = driver.find_element_by_tag_name(the_tag_name)
# Linkテキストで要素を探す
Works only for anchor elements.
the_link_text = 'Sign Up'
element = driver.find_element_by_link_text(the_link_text)
# Partial Link Textで要素を探す
Works only for anchor elements.
the_partial_link_text = 'Sign'
element = driver.find_element_by_partial_link_text(the_partial_link_text)
```

#####要素への処理

```Python
#5.要素をクリックする(例 登録ボタン)
the_id = 'register'
element = driver.find_element_by_id(the_id)
element.click()

#6.要素の中に書き込む(例 メールアドレスの入力)
the_id = 'email'
the_email = 'maruchin@maru.co.jp'
element = driver.find_element_by_id(the_id)
element.send_keys(the_email)

#7.選択する(例 プルダウン選択)
# 下記のように国選択がある
<select id="country">
<option value="US">United States</option>
<option value="CA">Canada</option>
<option value="MX">Mexico</option>
</select>
# 名前=Canadaを選択する
the_id = 'country'
element = driver.find_element_by_id(the_id)
select_element = Select(element)
select_element.select_by_visible_text('Canada')
# ID要素=CAから選択する
the_id = 'country'
element = driver.find_element_by_id(the_id)
select_element = Select(element)
select_element.select_by_value('CA')
# indexから選択する
the_id = 'country'
element = driver.find_element_by_id(the_id)
select_element = Select(element)
select_element.select_by_index(1)
```

#####スクリーンショット、アップロード、JavaScript

```Python
#8.スクリーンショットを撮る
the_path = 'C:/tests/screenshots/1.png'
driver.save_screenshot(the_path)

#9.ファイルをアップロードする
<input type="file" multiple="" id="upload_button">
the_file_path = 'C:/tests/files/example.pdf'
the_id = 'upload_button'
element = driver.find_element_by_id(the_id)
element.send_keys(the_file_path)
# まずfile要素を探すことが必要

#10.JavaScriptを実行する
js_code = 'document.getElementById("pop-up").remove()'
driver = execute_script(js_code)
```

#####インラインフレームの操作

```Python
11. iframe(インラインフレーム)に切り替える
<iframe id="payment_section">
   <input id="card_number">
   <input id="card_name">
   <input id="expiration_date">
   <input id="cvv">
</iframe>
# 上記のようなiframeに切り替える
the_iframe_id = 'payment_section'
the_element_id = 'card_number'
the_iframe = driver.find_element_by_id(the_iframe_id)
driver.switch_to.frame(the_iframe)
element = driver.find_element_by_id(the_element_id)
element.send_keys('41111111111111')
driver.switch_to.default_content()
```

#####タブの操作

```Python
#12.次のタブに切り替える
# タブを1つだけ開いてるとき、handle=0である
global nextTab
global currentTab
nextTab = currentTab + 1
driver.switch_to_window(driver.window_handles[nextTab])
currentTab = currentTab + 1
#13. 前のタブに切り替える
global previousTab
global currentTab
previousTab = currentTab - 1
driver.switch_to_window(driver.window_handles[previousTab])
currentTab = currentTab - 1
#14. タブを閉じる
driver.close()
```

#####各種操作①(カーソル等)

```Python
15. アラートを閉じる
driver.switch_to.alert.accept()

16. 更新する
driver.refresh()

17. Hover
the_id = "register"
the_element = driver.find_element_by_id(the_id)
hover = ActionChains(driver).move_to_element(the_element)
hover.perform()

18. 右クリック
the_id = "register"
the_element = driver.find_element_by_id(the_id)
right_click = ActionChains(driver).context_click(the_element)
right_click.perform()

```


#####各種操作②(カーソル等)

```Python
#19.オフセットしてクリックする
# オフセットは画面左上を座標(0, 0)としてピクセル表示される
the_id = "register"
the_element = driver.find_element_by_id(the_id)
x = 30
y = 20
offset = ActionChains(driver).move_to_element_with_offset(the_element,x,y)
offset.click()
offset.perform()

#20.キーを押す
the_id = 'register'
element = driver.find_element_by_id(the_id)
element.send_keys(Keys.RETURN)

#21.ドラッグ＆ドロップ
element_to_drag_id = 'ball'
target_element_id = 'goal'
element_to_drag = driver.find_element_by_id(element_to_drag_id)
target_element = driver.find_element_by_id(target_element_id)
ActionChains(driver).drag_and_drop(element_to_drag_id, target_element).perform()
```


#####ソース、クッキーの操作

```Python
22. ページソースを取得する
the_page_source = driver.page_source

23. クッキーを取得する
cookies_list = driver.get_cookies()

24. クッキーを削除する
cookie_item = 'shopping_cart'
# ひとつのクッキーを削除する
driver.delete_cookie(cookie_item)
# すべてのクッキーを削除する
driver.delete_all_cookies()
```

#####リスト取得、タイムアウト

```Python
#25.リストから最初の要素を取得する
the_id = 'register'
list_of_elements = driver.find_elements_by_id(the_id)
first_element = list_of_elements[0]

#26.ページ読み込みのタイムアウトを設定する
driver.set_page_load_timeout(20)

#27.要素のロードタイムアウトを設定する
from selenium.webdriver.support.ui import WebDriverWait
the_id = 'register'
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID, the_id)))
```

#####サイズ、ユーザーエージェント

```Python
#28.ウィンドウサイズを設定する
driver.set_window_size(1600, 1200)

#29.ユーザーエージェント文字列の変更
the_user_agent = 'hello'
chromedriver = 'C:/tests/chromedriver.exe'
options = webdriver.ChromeOptions()
options.add_argument('--user-agent = '+ the_user_agent)
driver = webdriver.Chrome(
   executable_path = chromedriver, 
   chrome_options = options)
```

#####外部操作

```Python
30. ウェブカメラとマイクを使う
chromedriver = 'C:/tests/chromedriver.exe'
options = webdriver.ChromeOptions()
options.add_argument("--use-fake-ui-for-media-stream")
options.add_argument("--use-fake-device-for-media-stream")
driver = webdriver.Chrome(
   executable_path = chromedriver, 
   chrome_options = options)

31. chromeの拡張機能を使う
chromedriver = 'C:/tests/chromedriver.exe'
extension_path = 'C:/tests/my_extension.zip'
options = webdriver.ChromeOptions()
options.add_extension(extension_path)
driver = webdriver.Chrome(
   executable_path = chromedriver, 
   chrome_options = options)
32. モバイル端末をエミュレート(模倣)する
google_pixel_3_xl_user_agent = 'Mozilla/5.0 (Linux; Android 9.0; Pixel 3 XL Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.98 Mobile Safari/537.36'
pixel_3_xl_emulation = {
   "deviceMetrics": {
      "width": 411, 
      "height": 731, 
      "pixelRatio": 3
   },
   "userAgent": google_pixel_3_xl_user_agent
}
options = webdriver.ChromeOptions()
options.add_experimental_option("mobileEmulation", pixel_3_xl_emulation)
driver = webdriver.Chrome(
   executable_path = chromedriver, 
   chrome_options = options)
```

##参照元
・【Python】Seleniumチートシート
https://qiita.com/DisneyAladdin/items/be771591c0a06b30a369
・【完全版】PythonとSeleniumでブラウザを自動操作(クローリング／スクレイピング)するチートシート
https://tanuhack.com/selenium/