MacでSeleniumを実行させてブログを開いてみた
はじめに
こんにちは!前越です。今回は、MacでSeleniumを使ってみました。
今回作るもの
- 自分のブログを自動で開く
- 最新の記事を取得して開く
環境
- Python 3.13.0
- Selenium 4.27.1
- ChromeDriver 132.0.6834.83 (r1381561)
環境構築手順
- Pythonのインストール
- Seleniumのインストール
pip install selenium
- ChromeDriverの設定
実行に必要なChromeDriverを下記サイトからダウンロードします
ダウンロードしたzipを解凍して中のファイルをPATHが通っているフォルダに移動させます
mv desktop/chromedriver /usr/local/bin/
やってみる
Chromeを起動して自分のブログにアクセスしてみます。
from selenium import webdriver
# ブラウザの起動
driver = webdriver.Chrome()
# URLを指定してWebページを開く
driver.get("https://example.com")
お〜!ブログは開くことができました。
次に各記事を取得してみます。
# 記事カードを全て取得
article_cards = driver.find_elements(By.CSS_SELECTOR, "div.flex.flex-col.rounded")
# 記事の数を表示
print(f"全部で{len(article_cards)}個の記事")
print("------------------------")
for i in range(len(article_cards)):
card = article_cards[i]
number = i + 1 # 1から始まる番号にする
# 記事のタイトルを取得
title = card.find_element(By.CSS_SELECTOR, "p.text-sm.text-gray-500").text
# 投稿日を取得
date = card.find_element(By.CSS_SELECTOR, "span.text-xs.text-gray-500").text
# 記事のリンクを取得
link = card.find_element(By.CSS_SELECTOR, "div.shadow-lg a").get_attribute("href")
# 記事の情報を表示
print(f"記事{number}:")
print(f"タイトル:{title}")
print(f"投稿日:{date}")
print(f"リンク:{link}")
print("------------------------")
結果
全部で9個の記事
------------------------
記事1:
タイトル:情シスのOJTを通して学んだことを振り返ってみる
投稿日:2024.12.16
リンク:https://dev.classmethod.jp/articles/ojt-T1U-experience/
------------------------
記事2:
タイトル:EventBridgeとSNSでEC2起動時の自動メール通知を実装する方法
投稿日:2024.12.13
リンク:https://dev.classmethod.jp/articles/aws-ec2-notification-eventbridge-sns/
------------------------
記事3:
タイトル:GitHubのリポジトリにある静的サイトをAWS Amplifyを使ってデプロイしてみる。
投稿日:2024.11.08
リンク:https://dev.classmethod.jp/articles/deploy-static-site-with-aws-amplify/
------------------------
記事4:
タイトル:AWS LambdaでS3へのファイルアップロードを検知しSlackに通知してみた
投稿日:2024.10.30
リンク:https://dev.classmethod.jp/articles/aws-lambda-s3-to-slack/
------------------------
記事5:
タイトル:Macでスクリーンショットの保存先を自由に設定する方法
投稿日:2024.10.24
リンク:https://dev.classmethod.jp/articles/mac-screenshot-save-location/
------------------------
記事6:
タイトル:renderで好きな人から告白される静的サイトをデプロイしてみました
投稿日:2024.10.18
リンク:https://dev.classmethod.jp/articles/render-create-static-site/
------------------------
記事7:
タイトル:GitHub Pagesで静的ウェブサイトを作ってみた
投稿日:2024.08.09
リンク:https://dev.classmethod.jp/articles/github-pages-create-static-site/
------------------------
記事8:
タイトル:ブラウザのタブごとに音量を調節できる拡張機能の『Volume Master - ボリュームコントローラー』ススメ!
投稿日:2024.08.07
リンク:https://dev.classmethod.jp/articles/chrome-extension-about-volume-control-per-tab/
------------------------
記事9:
タイトル:アノテーションに新卒で入社した前越です
投稿日:2024.04.01
リンク:https://dev.classmethod.jp/articles/20240401-join_new_maegoshi/
------------------------
やったー!取得できました。
書いたコード
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
# ブラウザを起動
driver = webdriver.Chrome()
# ブラウザを最大化
driver.maximize_window()
# ブログページにアクセス
blog_url = "https://developers.io/author/maegoshi-toshinori/"
driver.get(blog_url)
# ページの読み込みを待つ
sleep(3)
#記事の情報を一つづつ取得
try:
# 記事カードを全て取得
article_cards = driver.find_elements(By.CSS_SELECTOR, "div.flex.flex-col.rounded")
# 記事の数を表示
print(f"全部で{len(article_cards)}個の記事")
print("------------------------")
for i in range(len(article_cards)):
card = article_cards[i]
number = i + 1 # 1から始まる番号にする
# 記事のタイトルを取得
title = card.find_element(By.CSS_SELECTOR, "p.text-sm.text-gray-500").text
# 投稿日を取得
date = card.find_element(By.CSS_SELECTOR, "span.text-xs.text-gray-500").text
# 記事のリンクを取得
link = card.find_element(By.CSS_SELECTOR, "div.shadow-lg a").get_attribute("href")
# 記事の情報を表示
print(f"記事{number}:")
print(f"タイトル:{title}")
print(f"投稿日:{date}")
print(f"リンク:{link}")
print("------------------------")
# 最初の記事だけ、その記事のページに移動
if number == 1:
print("最新記事を開く。")
driver.get(link)
sleep(3)
break
except:
print("エラーが発生しました")
# ブラウザを閉じる
driver.quit()
動画
感想
スクレイピングには要素の取得にHTMLの知識が必要で、最初は大変でしたが、ChromeのデベロッパーツールでHTML構造を確認しながら進めることができました。この経験を通じて、他の作業も自動化できないか考えるきっかけになりました。
今後としては、特定のキーワードを含む記事だけを抽出してみたり、他の自動化ツールとの組み合わせたりもしてみたいなと思いました。
参考
アノテーション株式会社について
アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新ITテクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。