WindowsでHeadless Chromeでスクレイピング

qiita.com

sites.google.com

オプション入れてるけどバージョン59だと画面が表示される60で直るみたい

# --- coding: utf-8 ---
"""
えひめ医療情報ネットの今治市地区の当番医案内から医療機関のリストを取得
"""

import csv
import re
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

from bs4 import BeautifulSoup

options = Options()
# ヘッドレスモードを有効にする(次の行をコメントアウトすると画面が表示される)。
options.add_argument('--headless')
# ChromeのWebDriverオブジェクトを作成する。
driver = webdriver.Chrome(chrome_options=options)

# ブラウザ操作
driver.get("http://www.qq.pref.ehime.jp/qq38/qqport/kenmintop/")
driver.find_element_by_css_selector(
    "div.group2 > input.each-menu-citizen__button-hover").click()
driver.find_element_by_id("id_blockCd000004").click()
driver.find_element_by_name("forward_next").click()

# スクリーンショット
# driver.save_screenshot("ss.png")

html = driver.page_source
driver.quit()

shimanami = ['吉海町', '宮窪町', '伯方町', '上浦町', '大三島町', '関前']

with open('imabari119_cal.csv', 'wt', encoding='utf8') as fw:

    writer = csv.writer(fw, lineterminator='\n', dialect=csv.excel)

    soup = BeautifulSoup(html, 'html.parser')

    table = soup.find_all(
        'table', class_='comTblGyoumuCommon', summary='検索結果一覧を表示しています。')

    for i in table:

        # 日付取得
        date = i.td.get_text(strip=True).split()

        mae = []

        for hospital in i.find_all('tr', id=re.compile('1|2|3')):

            temp = hospital.get_text('|', strip=True).split('|')

            # 日付 曜日 病院名 住所 昼 昼TEL 夜 夜TEL 診療科目 受付時間
            if hospital['id'] == '1':
                result = date + temp[1:]

            elif hospital['id'] == '2':
                result = date + mae[2:6] + temp

            elif hospital['id'] == '3':
                result = date + temp

            # 夜間の電話がないところは空白挿入
            if result[6] != 'TEL(夜)':
                result.insert(6, None)
                result.insert(7, None)

            # 昼間と夜間が同じ病院の場合は結合
            if len(result) > 10:
                jikan = ''.join(result[9:]).replace('17:3017:30~', '')
                result[9] = jikan

            # 住所が島嶼部の場合は、診療科目を島嶼部に変更
            for j in shimanami:
                if j in result[3]:
                    if result[8] == '指定なし':
                        result[8] = '島嶼部'
                    break

            # id="2"の時用に直前の病院を保存
            mae = result[:10]

            # 保存
            writer.writerow(result[:10])