はじめに
Headless Chromeというモノがあることを知り、これまでに PhantomJS でやってきたことの移植に手を付けようと思いました。
とりあえず、過去に作った「コミュニティサイクルの利用履歴をスクレイピング」をそのターゲットにしました。
やってみたこと
Python3 + BeautifulSoup4 + Selenium + headless Chrome です。
ChromeDriverをインストールすることをお忘れなく。
docomo-cycle-hc.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import urllib.request
from bs4 import BeautifulSoup
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
import csv
from selenium.webdriver.chrome.options import Options
MEMBERID = "(自分のユーザID)"
PASSWORD = "(自分のパスワード)"
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1024,768')
driver = webdriver.Chrome(chrome_options=options)
driver.get("https://tcc.docomo-cycle.jp/cycle/TYO/cs_web_main.php?AreaID=2")
mid = driver.find_element_by_name('MemberID')
mid.send_keys(MEMBERID)
password = driver.find_element_by_name('Password')
password.send_keys(PASSWORD)
password.send_keys(Keys.RETURN)
obj1 = WebDriverWait(driver,5).until(
EC.presence_of_element_located((By.XPATH, "//*[@id='pc_bill']")))
obj1.click()
time.sleep(3)
data = driver.page_source.encode('utf-8')
soup = BeautifulSoup(data, "html.parser")
table = soup.findAll("table",{"class":"rnt_ref_table"})[0]
rows = table.findAll("tr")
csvFile = open("docomo-cycle-hc.csv", 'wt', newline='', encoding='utf-8')
writer = csv.writer(csvFile)
try:
for row in rows:
csvRow = []
for cell in row.findAll(['td', 'th']):
csvRow.append(cell.get_text().replace('\n',''))
writer.writerow(csvRow)
finally:
csvFile.close()
driver.close()
上記スクリプトを実行すると、利用履歴がdocomo-cycle-hc.csvというファイルに出力されます。
なお、Mac環境とWindows環境で動作確認済みです。
今後のこと
とりあえず、PhantomJSでやってきたことをHeadless Chromeに移植することは難しくないので、移植に関する記事はこのくらいにして、別のことにチャレンジしたいと思います。
参考
・Windows環境下でHeadless ChromeをPython3とSeleniumで動作させるキモ
・コミュニティサイクルの利用履歴をスクレイピング v2