ホームページを開く
webbrowser.open(“URL”)を使います。
import webbrowser
webbrowser.open("https://www.yahoo.co.jp/")
>>> True
import webbrowserは、Webブラウザのモジュールで、webbrowser.open(“URL”)で、URLのページを開くことが出来ます。
ブラウザの操作
準備するもの
・Chromeブラウザ用のWebDriver
・Seleniumモジュール
Chromeブラウザ用のWebDriverのダウンロード
Chromeブラウザのバージョンを確認
アドレスバーに「chrome://settings/help」と入力すると、「バージョン: 106.0.5249.119」のように現在お使いのバージョン表示されます。
WebDriverのダウンロードリンク(https://chromedriver.chromium.org/downloads)から、先ほど表示したバージョンに近いWebDriverをダウンロードします。
例えば、Chromeブラウザ「バージョン: 106.0.5249.119」であれば、ChromeDriver 106.0.5249.21を選択し、ご自身のOS(WindowsやMacOS等)にあったものを選択します。
ダウンロードしたZIP形式のファイルをダブルクリックして展開(解凍)します。
Seleniumモジュールのインストール
#jupyter notebookの場合
pip install selenium
Webページを遷移する
WebDriverの確認のため、複数のWebページを移動してみます。正常にChromeブラウザが立ち上がり、ページが遷移すれば完了です。
from selenium import webdriver
import time
# chromedriver.exeのリンクを指定(先ほどダウンロードしたもの)
driver_path = "/Users/TY/Downloads/chromedriver"
# WebDriverの作成
driver = webdriver.Chrome(executable_path=driver_path)
# www.google.co.jpを開く
#Webページを開く
driver.get("https://www.google.co.jp")
print(driver.title, driver.current_url)
time.sleep(2)
# www.yahoo.co.jpを開く
#Webページを開く
driver.get("https://www.yahoo.co.jp")
print(driver.title, driver.current_url)
time.sleep(2)
# www.python.orgを開く
#Webページを開く
driver.get("https://www.python.org")
print(driver.title, driver.current_url)
time.sleep(2)
# www.yahoo.co.jpに戻る
#ブラウザバック(履歴を1つ戻る)
driver.back()
print(driver.title, driver.current_url)
time.sleep(2)
# www.python.orgに進む
#ブラウザフォーワード(履歴を1つ進む)
driver.forward()
print(driver.title, driver.current_url)
time.sleep(2)
# www.python.orgを更新
#ブラウザ更新
driver.refresh()
print(driver.title, driver.current_url)
time.sleep(2)
# webdriverの終了
#ブラウザを閉じる
driver.quit()
Google検索
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
# chromedriver.exeがある場所
driver_path = "/Users/TY/Downloads/chromedriver"
# webdriverの作成
driver = webdriver.Chrome(executable_path=driver_path)
# 要素が見つからない場合は10秒待つように設定
driver.implicitly_wait(10)
# www.google.co.jpを開く
driver.get("https://www.google.co.jp")
# 検索ボックスに「大阪天気」を入力して、Enterキーを押す
driver.find_element(By.NAME, "q").send_keys("大阪天気" + Keys.ENTER)
# [降水確率]のボタンをクリック
driver.find_element(By.ID, "wob_rain").click()
# 5秒待つ
time.sleep(5)
# ブラウザを閉じる
driver.quit()
ブラウザ操作の記録
Selenium IDEを使うと、ブラウザ操作を記録することが出来ます。
インストールするには、Chromeウェブストア(https://chrome.google.com/webstore/category/extensions?hl=ja)内の検索窓で「Selenium IDE」を検索して、「Chromeに追加」をクリックします。
インストールすると、Chromeブラウザの拡張機能に追加されます。使用するためには、ブラウザ右上の拡張機能から「Selenium IDE」をクリックします。
「Selenium IDE」が起動したら、「Record a new test in a new project」をクリックします。
任意の「PROJECT NAME」を入力して「OK」をクリックします。
「BASE URL」に最初に開くウェブページのURLを入力して、「Start Recording」をクリックします。(例では、Googleのトップページを開きます)
レコーディングが開始されて、前で指定したGoogleのトップページを開きます。右下に「Selenium IDE is recording…」と表示されていることを確認します。
この状態になったら、レコーディングが開始までの作業は完了です。
この後のブラウザでの操作は記録されますので、任意の検索ワードを入れて検索するなら、ブラウザを操作します。
操作が終わり、記録を終了する場合は、ブラウザの裏に、「Seleium IDE」が開いていますので、右上の「レコーティング停止ボタン」をクリックします。
「TEST NAME」の入力を求められますので、入力して「OK」をクリックします。
ブラウザの操作が記録されますので、再生して確認する場合は、「再生ボタン」をクリックします。ブラウザが起動し、先ほど記録した作業が再生されます。
先ほど記録した作業のPythonコードとしてダウンロードするには、先ほど保存した「TEST NAME」の右側をクリックして、「Export」をクリックします。
Pythonコードにするためには、「Python pytest」を選択して、「Export」をクリックします。
任意の名前を入力して、「保存」をクリックします。
保存したファイルを開くと、先ほど記録したPythonコードを確認出来ます。
# Generated by Selenium IDE
import pytest
import time
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
class TestTestpython():
def setup_method(self, method):
self.driver = webdriver.Chrome()
self.vars = {}
def teardown_method(self, method):
self.driver.quit()
def test_testpython(self):
self.driver.get("https://www.google.com/")
self.driver.set_window_size(1440, 877)
self.driver.find_element(By.NAME, "q").send_keys("python")
self.driver.find_element(By.NAME, "q").send_keys(Keys.ENTER)
self.driver.find_element(By.LINK_TEXT, "ゼロからのPython入門講座").click()
self.driver.find_element(By.CSS_SELECTOR, ".section_body:nth-child(6) > .subpages:nth-child(2) > a").click()
self.driver.find_element(By.LINK_TEXT, "Next").click()
Webページから情報を読み取りExcel保存
from selenium import webdriver
from selenium.webdriver.common.by import By
import openpyxl
# chromedriver.exeがある場所を指定
driver_path = "/Users/TY/Downloads/chromedriver"
# webdriverの作成
driver = webdriver.Chrome(executable_path=driver_path)
# 要素が見つからない場合は10秒待つように設定
driver.implicitly_wait(10)
# 総務省の新着情報を開く
driver.get("https://www.mofa.go.jp/mofaj/shin/index.html")
# 最新の日付
date_elem = driver.find_element(By.CSS_SELECTOR, "#news dt:nth-of-type(1)")
date_text = date_elem.text
# 最新の新着情報のa要素
links = driver.find_elements(By.CSS_SELECTOR, "#news dd:nth-of-type(1) li a")
# 読み取り結果のリスト
data_list = []
for link in links:
# テキスト
link_text = link.text
# リンク先
link_url = link.get_attribute("href")
# リストに登録
data_list.append([date_text, link_text, link_url])
# 確認表示
print(date_text, link_text, link_url)
# ブラウザを閉じる
driver.quit()
# 新しいブックに保存
wb_new = openpyxl.Workbook()
ws_new = wb_new.worksheets[0]
row_num = 1
for data in data_list:
# 日付
ws_new.cell(row_num, 1).value = data[0]
# テキスト
ws_new.cell(row_num, 2).value = data[1]
# リンク先
ws_new.cell(row_num, 3).value = data[2]
row_num = row_num + 1
wb_new.save("/Users/TY/Downloads/data/外務省新着情報.xlsx")
ExcelのリストにあるWebページから情報を読み取りExcel保存
from selenium import webdriver
from selenium.webdriver.common.by import By
import openpyxl
# URLリストの読み込み
wb = openpyxl.load_workbook("/Users/TY/Downloads/官庁新着情報URL.xlsx")
ws = wb["Sheet1"]
url_list = []
for row in ws.iter_rows(min_row=2):
if row[0].value is None:
break
value_list = []
for c in row:
value_list.append(c.value)
url_list.append(value_list)
# chromedriver.exeがある場所
driver_path = "/Users/TY/Downloads/chromedriver"
# webdriverの作成
driver = webdriver.Chrome(executable_path=driver_path)
# 要素が見つからない場合は10秒待つように設定
driver.implicitly_wait(10)
# 読み取り結果のリスト
data_list = []
for url in url_list:
kancyo_name = url[0]
kancyo_url = url[1]
css_date = url[2]
css_links = url[3]
# 新着情報のページを開く
driver.get(kancyo_url)
# 最新の日付
date_elem = driver.find_element(By.CSS_SELECTOR, css_date)
date_text = date_elem.text
# 最新の新着情報のa要素
links = driver.find_elements(By.CSS_SELECTOR, css_links)
for link in links:
link_text = link.text
link_url = link.get_attribute("href")
data_list.append([kancyo_name, date_text, link_text, link_url])
# ブラウザを閉じる
driver.quit()
# 新しいブックに保存
wb_new = openpyxl.Workbook()
ws_new = wb_new.worksheets[0]
row_num = 1
for data in data_list:
# 官庁名
ws_new.cell(row_num, 1).value = data[0]
# 日付
ws_new.cell(row_num, 2).value = data[1]
# テキスト
ws_new.cell(row_num, 3).value = data[2]
# リンク先
ws_new.cell(row_num, 4).value = data[3]
row_num = row_num + 1
wb_new.save("/Users/TY/Downloads/data/各省庁新着情報.xlsx")