Seleniumでブラウザ操作する方法まとめ

# はじめに
Seleniumを使ってブラウザを操作する方法を解説します。

これを使うことで実際にブラウザを操作してのテストをするときに同じような操作を繰り返し手作業しなくても良くなったりして作業の効率化ができると思います。

# 準備
今回はpython3.10を用いて操作を行っていきます。  
まずはSeleniumをインストールする必要があります。  
下記のコマンドを実行してseleniumをインストールしましょう。

```sh
pip install selenium 
```

また今回はGoogleChromeを操作していきますのでChromeDriverというソフトをインストールする必要があります。
https://chromedriver.chromium.org/downloads

こちらのサイトからお使いのGoogleChromeのバージョンに合ったChromeDriverをインストールしてください。

また、Edgeなど他のブラウザを操作したい場合は各ブラウザに対応したドライバが必要になりますので準備しておいてください。
# 手順
ここからは各操作について実際のコードを基に解説していきます。
## ブラウザの立ち上げ

```python
from selenium import webdriver

browser = webdriver.Chrome()
```

インストールしたseleniumをインポートして```Chrome()```メソッドを呼び出しています。
これだけでGoogleChromeのブラウザを立ち上げることができます。
今回はbrowserという変数で戻り値を受け取っていますがこのインスタンスが立ち上がったブラウザと紐づいているので、このインスタンスからメソッドを呼び出すことで立ち上がったブラウザをコントロールすることができます。

## ページを表示
```python
from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://google.com')
```

このように```get()```を使うことで特定のページにアクセスすることができます。
引数は表示したいページのURLを渡すだけです。

## 要素の取得

```python
from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
browser.get('https://google.com')
Google_logo = browser.find_element(by=By.XPATH, value="/html/body/div[1]/div[2]/div/img")
```

画面上の特定の要素を操作をするには要素を取得する必要があります。
ボタンをクリックするにはクリックしたいボタンを指定する必要があるわけです。
JavaScriptの```document.getElementById()```のようなイメージですね。

seleniumではcommon.byをインポートして```find_element()```を用いて要素を取得します。

#### 要素の特定方法
上の例ではXPATHといってHTMLのDOM要素を上位からフルで指定しています。
XPATHはページの改修などで要素の並びが変更になったりすると使えなくなる可能性もあるので可能であれば他の方法で指定するのがおすすめです。

この他にもいくつかの指定方法があります。

```python
# idで指定
browser.find_element(by=By.ID, value="")

# classで指定   ※find_element s にすることでリスト型複数取得可能
browser.find_elements(by=By.CLASS_NAME, value="")

# nameで取得
browser.find_element(by=By.NAME, value="")
```
他にもありますがこの辺りが使えれば大体問題ないでしょう。

## ボタンのクリック

```python
from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
browser.get('https://google.com')
google_info_link = browser.find_element(by=By.XPATH, value="/html/body/div[1]/div[1]/a[1]")

google_info_link.click()
```
要素が取得できていればあとは```click()```を実行するだけです。
ここまでくれば簡単ですね。


## 文字の入力

```python
from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
browser.get('https://google.com')
Google_search = browser.find_element(by=By.XPATH, value="/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/textarea")

Google_search.send_keys('Hellp world')
```

こちらも```send_keys()```を使って入力したい文字を渡すだけです。

## セレクトボックスの指定
プルダウン形式要素を操作する場合少し特殊な操作が必要になります。

```python
from selenium.webdriver.support.ui import Select

Select(driver.find_element(By.NAME, 'enquete')).select_by_value ("1")
```
support.uiを別途インポートしてセレクトボックスを取得し、```select_by_value()```で選択したい項目のvalueを指定します。


## JavaScriptの実行

```python
driver.execute_script(f"window.open('https://google.com');")
```

```execute_script()```を用いてJavaScriptのコードを実行することもできます。

こちらの例では新しいタブを開き指定のURLにアクセスしています。

大量の画面をテストしたいときなどにURLをためておくだけで一気に開けるのでよく使っています。

## 注意点
ボタンのクリックや文字の入力をする際にうまく動かない場合は要素の指定を間違えている可能性があります。
例えば文字を入力する場合はinputタグを指定する必要があるので間違えて親要素などを取得しないように注意してください。

# まとめ
これでブラウザの操作方法は以上になります。
これらのコードを続けて書いていくことで新規入会機能や商品の登録画面など操作が長くなりがちな作業を自動的に完了することができます。
慣れてくると結構すぐに書けるようになって数回しか使わない場合でも意外と効率化につながったりするので試してみてください。

# 最後に
記事を読んでくださった方は、是非弊社開発課のXもフォローしてください。
毎日エンジニアに向けた情報発信を行っています。

https://twitter.com/tech_cin