ログインしてからキャプチャとHTMLを取得する

### やりたいこと
 - ログインが必要なサイトをスクレイピングする
 - 対象サイトは別ファイルで一覧にする
 - SSLのワーニングを無視する
 - 取得するのは、画面キャプチャとHTMLの内容

### ソース
``` capture.py
# https://gaaaon.jp/blog/capture
# ↓でセレニウムをインストールしておく
# pip install selenium
# ↓インストールしているChromeと同じバージョンのドライバをダウンロードしてPathに通しておく
# https://sites.google.com/chromium.org/driver/
# https://sites.google.com/a/chromium.org/chromedriver/downloads
# https://posipochi.com/2021/04/25/python-scrape-sample/
#
# ↓でpandasをインストールしておく (CSV読み込み)
# pip install pandas

from selenium import webdriver
from selenium.webdriver.common.keys import Keys # webdriverからスクレイピングで使用するキーを使えるようにする
from selenium.webdriver.common.by import By #入力先指定のため
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import JavascriptException

import pandas as pd # CSVを利用するため
import time # sleepするため
import configparser # configファイル読み込みの為
import os

# distutils.util.strtobool() が非推奨になっていたので作成
def strtobool(targetStr):
    return targetStr.lower() in ["y", "yes", "t", "true", "on", "1"]

# 画面最小サイズを判定する関数
def getMinimumSize(driver, target, minSize):
    try:
        return driver.execute_script(target) if driver.execute_script(target) > minSize else minSize
    except JavascriptException:
        return minSize

# configの読み込み
config_ini = configparser.ConfigParser()
config_ini.read('capturepy_config.ini', encoding='utf-8')

page_width = int(config_ini['screen']['minimumWidth'])
page_height= int(config_ini['screen']['minimumHeight'])
screenShotFlg=strtobool(config_ini['output']['screenShotFlg'])
getHtmlFlg=strtobool(config_ini['output']['getHtmlFlg'])


# 出力先Dirの作成
loginId=config_ini['login']['loginIdInputValue']
outputDir=config_ini['output']['outputDir']
outpudDir=outputDir if outputDir.endswith('\\') else outputDir + '\\' # \終わりにする
outpudDir=outpudDir + '\\' + loginId + '\\'# loginIdごとにフォルダを分ける
os.makedirs(outpudDir, exist_ok=True)

# web driver の設定
op = Options()
op.add_argument('--ignore-certificate-errors')
op.add_argument('--ignore-ssl-errors')
op.add_experimental_option('excludeSwitches', ['enable-logging'])
op.use_chromium = True
if strtobool(config_ini['screen']['hideBrowserFlg']):
    op.add_argument('--headless')

driver = webdriver.Chrome(options=op)

# loginUrlが存在する場合は、ログイン処理を行う
if config_ini['login']['loginUrl']:
    driver.get(config_ini['login']['loginUrl'])
    driver.find_element(by=By.XPATH, value=config_ini['login']['loginIdElementValue']).send_keys(loginId)
    driver.find_element(by=By.XPATH, value=config_ini['login']['passwordElementValue']).send_keys(config_ini['login']['passwordInputValue'])
    driver.find_element(by=By.XPATH, value=config_ini['login']['loginButtonElementValue']).click()
    time.sleep(1)
    driver.set_window_size(getMinimumSize(driver, 'return document.body.scrollWidth', page_width), getMinimumSize(driver, 'return document.body.scrollHeight', page_height))
    driver.save_screenshot(outpudDir + "000_loginResult" + ".png")

# CSVから対象URLを読み込み
data = pd.read_csv(config_ini['input']['targetUrlCSV'], header=None)
urls = list(data[0])
#urls = ["https://qiita.com/login?redirect_to=%2F"]

prefix_num = 1

for url in urls:
    driver.get(url)
    driver.set_window_size(getMinimumSize(driver, 'return document.body.scrollWidth', page_width), getMinimumSize(driver, 'return document.body.scrollHeight', page_height))
    url_name = url.lstrip("https://" "http://" ).replace("/","_").replace("?", "_").replace(":", "_")
    
    if screenShotFlg:
        driver.save_screenshot(outpudDir + str(prefix_num).zfill(3) + "_" + str(url_name) + ".png")
    
    if getHtmlFlg:
        f = open(outpudDir + str(prefix_num).zfill(3) + "_" + str(url_name) + ".html", 'w', encoding='utf-8')
        f.writelines(str(driver.page_source))
        f.close()

    prefix_num += 1
    
driver.quit()

```


``` capturepy_config.ini
[login]
loginUrl=https://qiita.com/login?redirect_to=%2F
loginIdInputValue=loginid
passwordInputValue=password123
# ↓ユーザID・パスワード入力先とログインボタンをXPATHで指定する
loginIdElementValue=//*[@id="identity"]
passwordElementValue=//*[@id="password"]
loginButtonElementValue=/html/body/div[1]/div/div/div/div[2]/div[2]/form/div[3]/input

[input]
targetUrlCSV=urls.csv

[output]
outputDir=C:\Users\user\out
# 画像取得するかどうか ["y", "yes", "t", "true", "on", "1"](大文字小文字問わず)
screenShotFlg=yes
# HTMLを取得するかどうか ["y", "yes", "t", "true", "on", "1"](大文字小文字問わず)
getHtmlFlg=y

[screen]
minimumWidth=1280
minimumHeight=768
# ブラウザ非表示にするかどうか ["y", "yes", "t", "true", "on", "1"](大文字小文字問わず)
hideBrowserFlg=y

```

```urls.csv（iniファイルのtargetUrlCSVで指定したファイル）
対象のURL
　・
　・
　・
```

XPATHは、開発者ツールからコピーできる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559813/704f5956-eeda-e462-e6f1-504b86d4692c.png)

### 実装時に出会ったエラーと解決方法はこちら
https://qiita.com/t_o01/items/0eabc33358dcbe7e8ab2