ブラウザを自動操作しよう Selenium
Selenium のインストール
Selenium は昔から結構ブラウザテストに利用されてきているので有名ドコロかもしれません。
ここでは初めてインストールする環境での操作を行っていきます。
事前環境として、Python を入れています。
- Python version 3.8.3 (anaconda3-2020.07)
で、この状況でまずはインストール
% pip install selenium
で、 Chrome にドライバをインストールします。
今回 Mac 使うので、brew 一発ですが、 Windows なら ドライバー要件 :: Seleniumドキュメント から設定します。
ちなみに Windows の場合別口で、 Chocolatey を使う手段もあります。 Chocolatey Software | Selenium All Drivers 4.0
% pip install selenium
コード: 画像取得
ものは試しに画像として取得。
として、selenium_amazon.py
としてこんなのを書くと
from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument('--headless') driver = webdriver.Chrome(options=options) driver.get('https://www.amazon.co.jp/') driver.save_screenshot('amazon.png') driver.quit()
スクロール含めたすべてを取得してみる
上記コードに割り込みを入れて
driver.get('https://www.amazon.co.jp/') # ここから page_width = driver.execute_script('return document.body.scrollWidth') page_height = driver.execute_script('return document.body.scrollHeight') driver.set_window_size(page_width, page_height) # ここまで driver.save_screenshot('amazon.png')
ちなみにファイルが大きくて添付諦めた。
実際にクリックなど操作する
このへん から操作を調べつつ書いてみた。
hatenablog_click.py
として記述
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait options = webdriver.ChromeOptions() driver = webdriver.Chrome(options=options) # サイトを開く driver.get('https://white-azalea.hatenablog.jp/') # 検索フォームを検索 searchForm = driver.find_element(By.CSS_SELECTOR, 'input[class="search-module-input"]') # 検索フォームに `selenium` を記載 searchForm.send_keys('selenium') # 検索フォームに enter キーダウンイベントを送信(検索) searchForm.send_keys(Keys.ENTER) # 検索結果を待機(最大 3 秒) def document_initialised(driver): return driver.find_element(By.CSS_SELECTOR, 'div[class="search-result"]') WebDriverWait(driver, 3).until(document_initialised) # スクリーンショット撮影 driver.save_screenshot('hatenablog.png') driver.quit()
トラブルシューティング
- 自分はコレ食ったのでメモ
seleniumを使用しようとしたら、「"chromedriver"は開発元を検証できないため開けません。」と言われた - Qiita - 既存だと、Selenium でブラウザ起動した瞬間、ユーザ情報も何も乗らない状態で起動するけど、それはプロファイル設定のせい。
デフォルトだと新規プロファイルで起動して、一切のデータを引き継がないので、「options.add_argument(r''--user-data-dir=C:\Users\ユーザ名\AppData\Local\Google\Chrome\USERDA~1'')」てな感じに補正する必要がある。
Python - seleniumでchromeをシークレットモードかつ拡張機能付きで起動したい|teratail