Pythonで記事テンプレを自動作成(Seleniumでスクレイピング)

####まえがき
毎回定型文を書くことも面倒になってきたのでPythonを勉強して自動化してしまえと考えた次第です

####本題

#####機器概要
・Windows10 Laptop
・Anaconda3 4.8.4
・Python3.8.5
・VScode

####手順
#####1. 環境構築
結局のところ環境を整えるのが一番面倒だと感じた(特にPath)
[参考](https://qiita.com/T170521/items/ff3975c89d359397c655)に分かりやすい解説等あるので参照してほしい
(※以前にVScodeのTerminalでLinuxと同じように実行できるようにしていたので困らなかったがどうやったか忘れた，cygwin64とか入れてPassを通した気がする)

AnacondaとVScodeで利用できるようにした
Anacondaをインストールして，システム環境変数からPathを通す
再起動してAnaconda promptで`Python -V`と`conda -V`でバージョンが確認できればOk
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563922/491ac0f1-a224-8cff-36c6-fde6821ed9c9.png)
VScodeではPythonの拡張機能を入れて，設定から`python python path`でインストールしたAnaconda3のpython.exeを絶対パスで指定して再起動すれば終わり，実行できるようになる 
#####2. 必要なファイルを用意する
**Selenium**
Terminalで`pip install Selenium`でインストール
**Webdriver**
スクレイピングしたいブラウザに合わせて用意(バージョンも合わせる)
今回は[Chrome](https://chromedriver.chromium.org/downloads)と[Edge](https://developer.microsoft.com/ja-jp/microsoft-edge/tools/webdriver/)を用意した

#####3. code(python)
ブラウザを立ち上げてサイトにアクセス
ログイン処理を行い，記事を作成，下書き保存までを行う

**Chrome用**

```python:Qiita_Chrome.py
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.alert import Alert
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

# Seleniumをあらゆる環境で起動させるChromeオプション
options = Options()
options.add_argument('--disable-gpu')
options.add_argument('--disable-extensions')
options.add_argument('--proxy-server="direct://"')
options.add_argument('--proxy-bypass-list=*')
options.add_argument('--start-maximized')
# options.add_argument('--headless'); # ※ヘッドレスモードを使用する場合、コメントアウトを外す

user_name = "{name}" #ログインする名前
passward = "{pass}" #パスワード
url = 'https://qiita.com/drafts/new'
DRIVER_PATH = (r'{#Driverのパス}') 
text_title = "{Title}"
tag = "{tag1} {tag2} {tag3} {tag4} "
text_body = "{本文}"

# ブラウザの起動
driver = webdriver.Chrome(executable_path=DRIVER_PATH)
driver.get(url) #指定したURLにアクセス
time.sleep(2) #2秒あける

# ログイン処理
user_box = driver.find_element_by_id('identity') #ログイン名の記入欄を指定
user_box.send_keys(user_name) #記入
pass_box = driver.find_element_by_id('password') #パスワードを
pass_box.send_keys(passward) #記入
pass_box.submit()
time.sleep(2)

# 自動でフォーマット作成
new_title = driver.find_element_by_xpath('/html/body/div[1]/div[3]/div/div[1]/div/div/input') #タイトル記入欄を指定
new_title.send_keys(text_title) #記入
new_tag = driver.find_element_by_xpath('/html/body/div[1]/div[3]/div/div[2]/input')#タグ記入欄を指定
new_tag.send_keys(tag) #記入
new_body = driver.find_element_by_xpath('/html/body/div[1]/div[3]/div/div[3]/div/div[1]/div[2]/textarea') #本文記入欄を指定
new_body.send_keys(text_body) #記入
time.sleep(2)

# 下書き保存 (なくても保存してた)
# <a href="#" tabindex="43" class="MarkdownEditorFooterSelector__DropdownItem-sc-11l11zp-4 fUjZzp"><i class="fa fa-check"></i><i class="fa fa-save"></i>下書き保存</a>
# save = driver.find_element_by_xpath('/html/body/div[1]/div[3]/div/div[4]/div/div[2]/div[2]/div/ul/li[1]/a')
# save.click()
# button = driver.find_element_by_xpath('/html/body/div[1]/div[3]/div/div[4]/div/div[2]/div[2]/div/button')
# button.click()
# driver.quit()

driver = webdriver.Chrome(executable_path=DRIVER_PATH)
driver.get('https://qiita.com/drafts')
time.sleep(2)

# ログイン処理
user_box = driver.find_element_by_id('identity')
user_box.send_keys(user_name)
pass_box = driver.find_element_by_id('password')
pass_box.send_keys(passward)
pass_box.submit()
```
**Edge用**

```python:Qiita_Edge.py
import time
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.alert import Alert
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

user_name = "{name}" #ログインする名前
passward = "{pass}" #パスワード
url = 'https://qiita.com/drafts/new'
DRIVER_PATH = (r'{#Driverのパス}') 
text_title = "{Title}"
tag = "{tag1} {tag2} {tag3} {tag4} "
text_body = "{本文}"

# ブラウザの起動
driver = webdriver.Edge(executable_path=DRIVER_PATH)
driver.get(url) #指定したURLにアクセス
time.sleep(2)

# ログイン処理
user_box = driver.find_element_by_id('identity') #ログイン名の記入欄を指定
user_box.send_keys(user_name) #記入
pass_box = driver.find_element_by_id('password') #パスワードを
pass_box.send_keys(passward) #記入
pass_box.submit()
time.sleep(2)

# 自動でフォーマット作成
new_title = driver.find_element_by_xpath('/html/body/div[1]/div[3]/div/div[1]/div/div/input') #タイトル記入欄を指定
new_title.send_keys(text_title) #記入
new_tag = driver.find_element_by_xpath('/html/body/div[1]/div[3]/div/div[2]/input')#タグ記入欄を指定
new_tag.send_keys(tag) #記入
new_body = driver.find_element_by_xpath('/html/body/div[1]/div[3]/div/div[3]/div/div[1]/div[2]/textarea') #本文記入欄を指定
new_body.send_keys(text_body) #記入
time.sleep(2)

# 下書き保存 (なくても保存してた)
# <a href="#" tabindex="43" class="MarkdownEditorFooterSelector__DropdownItem-sc-11l11zp-4 fUjZzp"><i class="fa fa-check"></i><i class="fa fa-save"></i>下書き保存</a>
# save = driver.find_element_by_xpath('/html/body/div[1]/div[3]/div/div[4]/div/div[2]/div[2]/div/ul/li[1]/a')
# save.click()
# button = driver.find_element_by_xpath('/html/body/div[1]/div[3]/div/div[4]/div/div[2]/div[2]/div/button')
# button.click()
driver.quit()

driver = webdriver.Edge(executable_path=DRIVER_PATH)
driver.get('https://qiita.com/drafts')
time.sleep(2)

# ログイン処理
user_box = driver.find_element_by_id('identity')
user_box.send_keys(user_name)
pass_box = driver.find_element_by_id('password')
pass_box.send_keys(passward)
pass_box.submit()
```

#####動作確認
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">pythonで自動化<a href="https://twitter.com/hashtag/Python?src=hash&amp;ref_src=twsrc%5Etfw">#Python</a> <a href="https://twitter.com/hashtag/Python3?src=hash&amp;ref_src=twsrc%5Etfw">#Python3</a> <a href="https://twitter.com/hashtag/Anaconda?src=hash&amp;ref_src=twsrc%5Etfw">#Anaconda</a> <a href="https://twitter.com/hashtag/VSCode?src=hash&amp;ref_src=twsrc%5Etfw">#VSCode</a> <a href="https://t.co/Ju6z8RTC41">pic.twitter.com/Ju6z8RTC41</a></p>&mdash; ゆーま (@sagirin262) <a href="https://twitter.com/sagirin262/status/1303896445259407360?ref_src=twsrc%5Etfw">September 10, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

#####4. batファイル作成
いちいちコマンド打つのは面倒なのでバッチファイルをワンクリックで実行できるようにします．
テキストファイルを作成し，コマンドを記入

```Qiita_new.txt
cd {scriptのあるフォルダ}
python {作成したpythonファイル}
pause
```

拡張子`.txt`→`.bat`に変更
これで完成

####実行例
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ワンクリック😆 <a href="https://t.co/wYjuh7OiHE">pic.twitter.com/wYjuh7OiHE</a></p>&mdash; ゆーま (@sagirin262) <a href="https://twitter.com/sagirin262/status/1303896699358724096?ref_src=twsrc%5Etfw">September 10, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
実行，動作事態は問題ないが，Debag.txtにエラーが吐き出されるので完全ではない
下書き保存の流れでクリック処理などがうまくいってないのかも...
####あとがき
いつもどんな感じで書いてたか忘れちゃうので少しは楽になったかな．
これでたくさん記事が書けますね😅😅😅😅😅
####参考
以前にまとめたので[こちら](https://qiita.com/T170521/items/ff3975c89d359397c655)を参照して下さい