
Selenium + Python でYahooのログインや検索・メールの操作を自動化する。
2019-10-2112 min read
目次
概要
Selenium + PythonでYahooメールの各種メールボックスの操作を自動化する方法の紹介です。
環境
今回紹介する方法はmac上にselenimu環境を構築しています。
- macOS catalina
- Python3.7
- Selenium
- ChromeDriver
Selenium環境の構築
Seleniumのインストール
まずはじめにSeleniumをpipでインストールします。
$ pip install selenium
続いて、ChromeDriverをbrew経由でインストールします。
ChromeDriverは、Selenium WebDriverがChromeを制御するために使用する別個の実行ファイルです。
$ brew install chromedriver
検証
from selenium import webdriver
driver = webdriver.Chrome()
正しくインストールされていると、上記のコードを実行した際にChromeが立ち上がります。
Yahoo検索する
ここから実践編です。まずは簡単に実装できるヤフーの検索の実装の紹介です。
具体的には検索のテキストボックスや検索ボタンの要素を取得してイベントを実行するというものです。
サンプルソース
from selenium import webdriver
from selenium.webdriver.common import keys
import time
driver = webdriver.Chrome()
## 検索
def search(word):
# "p"は検索ボックスのname
driver.find_element_by_name("p").send_keys(word)
# "_63Ie6douiF2dG_ihlFTen"は検索ボタンのクラス
driver.find_element_by_class_name("_63Ie6douiF2dG_ihlFTen").click()
search("Selenium")
Yahooにログイン/ログアウトする
次にヤフーにログインする実装の紹介です。
ポイントとなるのはtime.sleep(2)を挿入して待ち時間を作っています。ヤフーのログイン画面はIDを入力した後にJSのイベントが走るので、"待ち"を作って考慮しています。
from selenium import webdriver
from selenium.webdriver.common import keys
import time
driver = webdriver.Chrome()
## Login
def login(username, password):
driver.get("https://login.yahoo.co.jp/config/login")
driver.find_element_by_id("username").send_keys(username)
driver.find_element_by_id("btnNext").click()
time.sleep(2)
driver.find_element_by_id("passwd").send_keys(password)
driver.find_element_by_id("btnSubmit").click()
また、ログアウトは次のコードとなります。比較的簡単に実装できました。
## Logout
def logout():
driver.get("https://login.yahoo.co.jp/config/login?logout=1")
Yahooメールの操作〜ゴミ箱を空にする
次はYahooメールの操作についての実装です。
ここではゴミ箱の中身を全て削除するサンプルを紹介します。
Yahooメールの受信メール関連の操作は、概ね共通であり、受信ボックス画面(TOP)に遷移した後、
- 任意のタブ or メニューを選択
- 項目の操作
- イベント実行
- モーダルウィンドウの対応
、、、という流れになります。
ゴミ箱の操作であれば、
- ゴミ箱を選択
- 任意の項目を選択 (サンプルソースでは全メール選択)
- 削除実行
- OKボタンのモーダル操作
という流れになります。
def deleteTrashMail():
driver.get("https://jp.mg5.mail.yahoo.co.jp/")
driver.find_element_by_id("Trash").click()
time.sleep(1)
driver.find_element_by_class_name("focusable").click()
time.sleep(1)
driver.find_element_by_id("h_delete").click()
time.sleep(1)
driver.find_element_by_id("okModalOverlay").click()
サンプルソース
from selenium import webdriver
from selenium.webdriver.common import keys
import time
driver = webdriver.Chrome()
## 検索
def search(word):
driver.find_element_by_name("p").send_keys(word)
driver.find_element_by_class_name("_63Ie6douiF2dG_ihlFTen").click()
## Login
def login(username, password):
driver.get("https://login.yahoo.co.jp/config/login")
driver.find_element_by_id("username").send_keys(username)
driver.find_element_by_id("btnNext").click()
time.sleep(2)
driver.find_element_by_id("passwd").send_keys(password)
driver.find_element_by_id("btnSubmit").click()
## Logout
def logout():
driver.get("https://login.yahoo.co.jp/config/login?logout=1")
def _deleteSelectedMails():
time.sleep(1)
driver.find_element_by_class_name("focusable").click()
time.sleep(1)
driver.find_element_by_id("h_delete").click()
time.sleep(1)
driver.find_element_by_id("okModalOverlay").click()
## 受信メール削除
def deleteReceivedMail():
driver.get("https://jp.mg5.mail.yahoo.co.jp/")
_deleteSelectedMails()
## 下書きメール削除
def deleteDraftMail():
driver.get("https://jp.mg5.mail.yahoo.co.jp/")
driver.find_element_by_id("Draft").click()
_deleteSelectedMails()
## 迷惑メール削除
def deleteBulkMail():
driver.get("https://jp.mg5.mail.yahoo.co.jp/")
driver.find_element_by_id("Bulk").click()
_deleteSelectedMails()
## 送信メール削除
def deleteSentMail():
driver.get("https://jp.mg5.mail.yahoo.co.jp/")
driver.find_element_by_id("Sent").click()
_deleteSelectedMails()
## ゴミ箱メール削除
def deleteTrashMail():
driver.get("https://jp.mg5.mail.yahoo.co.jp/")
driver.find_element_by_id("Trash").click()
_deleteSelectedMails()
## main
if __name__ == '__main__':
try:
login("ididididid", "passpasspass")
except:
print('error:login')
try:
deleteReceivedMail()
time.sleep(3)
except:
print('error:deleteReceivedMail')
try:
deleteDraftMail()
except:
print('error:deleteDraftMail')
try:
deleteBulkMail()
except:
print('error:deleteBulkMail')
try:
deleteSentMail()
except:
print('error:deleteSentMail')
try:
deleteTrashMail()
except:
print('error:deleteTrashMail')
try:
logout()
except:
print('error:logout')
driver.close()
参考
Recommends
Selenium + Python でYahooのログインや検索・メールの操作を自動化する...
2019-10-21
seleniumの環境構築 Ubuntu + Python3で構築
2018-04-09
AWS Amplify で コンテナベースのデプロイを行い REST API を構築
2021-07-26
Pythonでソケット通信を実装しメッセージの送受信を行う
2021-07-25
CentOS8 に Python + OpenCV をインストール
2021-06-05
Python poetryでパッケージ開発 PyPIで公開 Pytestでテスト CIをG...
2021-05-06
エンジニアなMacBookのセットアップ 開発環境の構築
2019-07-05
JPG画像を圧縮する OpenCV + Python
2019-01-20
Python + OpenCVで顕著性 (saliecy) マップを実装
2018-12-14
Python + OpenCVのfillConvexPolyで複雑なポリゴンを描画する
2018-11-27
Python+OpenCVで任意の画像領域:ROIのみに処理 マスク画像を使って
2018-11-25
OpenCVのチャンネルエラー対処: (-215:Assertion failed) (m...
2018-11-25
顔のランドマーク検出とドロネー分割 Python + OpenCV + dlib
2018-11-17
ドロネー図を描画 Python + OpenCV
2018-11-17
顔のランドマークを検出 Python + OpenCV + dlib を使う
2018-10-28
New Posts
[AWS CDK]ECS FargateでNestJSで作成したRESTfull APIデ...
2022-05-24
[AWS CDK]S3 CloudFront OAI Route53 構成 で NextJ...
2022-05-23
[CDK]SNS+SQS+DynamoDBでBounceとComplaint情報を収集する...
2022-04-11
[AmazonSES] node.js と ejs を利用してEメールを送信する
2022-04-09
GatsbyからNext.jsへのサイト移行
2022-04-04
[AWS CDK] Lambda で S3 オブジェクトを読み書きするStackの構築
2022-03-18
[AWS CDK] S3 + CloudFrontの構築とOriginAccessIden...
2022-03-09
[AWS CDK] Bastion(踏み台)構築。SSMとEC2InstanceConne...
2022-03-06
[AWS CDK] Cognito を構築
2022-03-04
AWS CDK v2 でVPC上にAPI Gateway + Lambda + RDS +...
2022-02-28
javascriptで累積和を解く
2022-02-27
AWS Amplify で monorepo を導入し 単一リポジトリで複数プロジェクトを...
2022-02-25
AWS CDK v2 で Lambda関数のデプロイ
2022-02-23
NextJSでDevToysのようなものを作成した
2022-02-22
JSで動的計画法を利用して部分和問題を解く
2022-02-20
Hot posts!
Proxy環境下でcurlを実行する
2019-12-07
OpenCVのMatのタイプ一覧表
2018-11-25
Macでも利用できるDBクライアント MySQL PostgreSQL Oracle など
2019-12-21
TablePlusを使ってみる。シンプルでモダンなSQLクライアントツール
2018-09-30
DBクライアントツールはDBeaverをおすすめしたい
2021-03-08
AWS S3のアクセスキーIDとシークレットアクセスキーの取得 作業用ユーザを作成
2019-06-12
AtCoderで初めて色がつくまでの話(茶色) レートが中々上がらなかった原因
2018-11-25
CentOS8でEPELとPowerToolsリポジトリの有効化
2020-11-30
Macでターミナルからポートスキャンを行う方法。
2018-12-09
Python + OpenCVのfillConvexPolyで複雑なポリゴンを描画する
2018-11-27
Date
▶︎
2022 年 (23)
▶︎
2021 年 (40)
▶︎
2020 年 (30)
▶︎
2019 年 (90)
▶︎
2018 年 (89)
▶︎
2017 年 (1)
Tags
Author