前提
Pythonでスクレイピングを行っています。
(社内用のためurlは一部変更しています。)
ライブラリ:selenium
発生している問題・エラーメッセージ
昨日の日付のみそれ以降の処理に進むということをしたいのですが、正規表現のところで引っかかっています。。
エラー文
File "/Users/myname/Desktop/file/vscode/f_rescue.py", line 46, in <module> cfm_date = str2date(cfm_date_str) File "/Users/myname/Desktop/file/vscode/f_rescue.py", line 12, in str2date tar_date = datetime(int(result[1]), int(result[2]), int(result[3])) TypeError: 'NoneType' object is not subscriptable
エラー箇所
<line 46> cfm_date = str2date(cfm_date_str) <line 12> tar_date = datetime(int(result[1]), int(result[2]), int(result[3]))
一応ブラウザの動きを見ると、
# 遷移したページ内の投稿日を確認 table_striped_box = driver.find_elements_by_css_selector(".table > tbody > tr")
このページまでは遷移します。
該当のソースコード
python
1from selenium import webdriver 2import time 3import csv 4import re 5from datetime import datetime, date, timedelta 6from selenium.webdriver.common.keys import Keys 7from selenium.webdriver.chrome.options import Options 8 9 10def str2date(date_str): 11 result = re.search(r'(\d{4}).(\d{2}).(\d{2}).', date_str) 12 tar_date = datetime(int(result[1]), int(result[2]), int(result[3])) 13 return tar_date 14 15def is_yesterday(tar_date): 16 now = datetime.now() 17 yesterday = now - timedelta(days=1) 18 yesterday_str = datetime.strftime(yesterday, '%Y-%m-%d') 19 tar_date_str = datetime.strftime(tar_date, '%Y-%m-%d') 20 21 return tar_date_str == yesterday_str 22 23 24# driver = webdriver.Chrome('/usr/local/bin/chromedriver',chrome_options=options) 25driver = webdriver.Chrome('/usr/local/bin/chromedriver') 26driver.get('https://xxx.com/admin/admin/user/login') 27 28# ID/PASSを入力 29id = driver.find_element_by_id("xxx") 30id.send_keys("xxx") 31password = driver.find_element_by_id("xxx") 32password.send_keys("xxx") 33 34time.sleep(1) 35 36# ログインボタンをクリック 37login_button = driver.find_element_by_css_selector("button.btn") 38login_button.click() 39 40# サイト内で特定のページに遷移 41driver.get('https://xxx.com/admin/order') 42# 遷移したページ内の投稿日を確認 43table_striped_box = driver.find_elements_by_css_selector(".table > tbody > tr") 44 45for table_striped in table_striped_box: 46 cfm_date_str = table_striped.find_elements_by_css_selector("td")[2].text 47 cfm_date = str2date(cfm_date_str) 48 print(cfm_date) 49# if is_yesterday(cfm_date): 50# print('cfm_date_str')
試したこと
#プリントで確認 print(cfm_date_str) 2020.09.08 2020.09.08 2020.09.08 2020.09.07 2020.09.07 2020.09.06
実現したいこと
コードの一番下にコメントアウトで記載している
if is_yesterday(cfm_date): print('cfm_date_str')
でprint('cfm_date_str')部分を実際の処理に変更し、昨日の日付のもののみこの処理を行うようにしたいです。
アドバイスいただけますと幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー