初心者向けPythonとSeleniumでブラウザ自動化 - Python3

Selenium とは?

Selenium はブラウザーの自動化を可能にするツールとライブラリーのプロジェクトです。

pip install selenium

Node.js の例は以下を参考にしてください。

起動するブラウザを選択する

# Chrome
webdriver.Chrome()

# Edge
webdriver.Edge()

# Firefox
webdriver.Firefox()

要素を取得する

Google 検索で検索ボックスを ID で指定するには以下のようにします。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import signal
import os

browser = webdriver.Chrome()
browser.maximize_window() # ブラウザを最大化する

try:
    url = 'https://www.google.com/'
    browser.get(url)

    Google_search = browser.find_element(by=By.ID, value="APjFqb")
    Google_search.send_keys('Hello world')
    Google_search.send_keys(Keys.ENTER)

finally:
    os.kill(browser.service.process.pid,signal.SIGTERM)
    browser.quit()

クラス名を指定するには、次のようにします。

Google_search = browser.find_element(By.CLASS_NAME, value="gLFyf")

タグ名を指定するには、次のようにします。

Google_search = browser.find_element(By.TAG_NAME, value="textarea")

XPath を指定するには、次のようにします。

Google_search = browser.find_element(By.XPATH, value='//*[@id="APjFqb"]')

XPath を調べるには次のようにします。

  • F12 を押してデベロッパーツールを開く
  • XPATH を取得したい要素が記述されているコードを探す
  • 見つけたコード上で「右クリック」→「コピー」→「XPathのコピー」を選択します

name 属性を指定するには、次のようにします。

Google_search = browser.find_element(By.NAME, value='q')

css セレクタの、タグ名、id属性、class属性などを利用することができます。

CSS セレクタを指定するには、次のようにします。

Google_search = browser.find_element(By.CSS_SELECTOR, value='#APjFqb')

リンクテキストを指定するには、次のようにします。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import signal
import os

browser = webdriver.Chrome()
browser.maximize_window() # ブラウザを最大化する

try:
    url = 'https://www.google.com/'
    browser.get(url)

    Google_search = browser.find_element(By.LINK_TEXT, value='Gmail')
    Google_search.click()

finally:
    os.kill(browser.service.process.pid,signal.SIGTERM)
    browser.quit()

リンクテキストの一部を指定するには次のようにします。

Google_search = browser.find_element(By.PARTIAL_LINK_TEXT, value='Gma')

PARTIAL : パーシャル

部分的

google で検索する

test.py

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import signal
import os

browser = webdriver.Chrome()
browser.maximize_window() # ブラウザを最大化する

try:
    url = 'https://www.google.com/'
    browser.get(url)

    Google_search = browser.find_element(by=By.ID, value="APjFqb")
    Google_search.send_keys('Hello world')
    Google_search.send_keys(Keys.ENTER)

finally:
    os.kill(browser.service.process.pid,signal.SIGTERM)
    browser.quit()

ウィンドウサイズを変更するには「 browser.maximize_window() 」のところを以下のようにします。

browser.set_window_size(1200,400)

起動したブラウザのウィンドウサイズを取得することもでき、戻り値は辞書型です。

print(browser.get_window_size()) #=>{'width': 1200, 'height': 400}

複数のウェブページをまとめて開く

from selenium import webdriver
import signal
import os

browser = webdriver.Chrome()
browser.maximize_window()

try:
    url = 'https://www.google.com/'
    browser.get(url)

    urls = [
    'https://www.yahoo.co.jp/',
    'https://x.com/'
    ]

    for url in urls:
      browser.execute_script("window.open(arguments[0], '_blank')", url)

finally:
    os.kill(browser.service.process.pid,signal.SIGTERM)
    browser.quit()

yahoo の左側のリンクテキストを取得する

from selenium import webdriver
from selenium.webdriver.common.by import By
import signal
import os

browser = webdriver.Chrome()
browser.maximize_window()

try:
    url = 'https://www.yahoo.co.jp/'
    browser.get(url)

    web_page = browser.find_element(By.ID, value='ToolList')
    links = web_page.find_elements(By.CLASS_NAME, 'fQMqQTGJTbIMxjQwZA2zk')
        
    # リンクのURLを一覧表示します
    for index, link in enumerate(links, start=1):
        txt = link.get_attribute('textContent')
        print(f'{index}. {txt}')

finally:
    os.kill(browser.service.process.pid,signal.SIGTERM)
    browser.quit()