【Python】ホームページを開かせる

Python

ホームページを開く

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")
タイトルとURLをコピーしました