LoginSignup
32
44

More than 5 years have passed since last update.

【Python】自動でサイトのキャプチャを撮ってくるツールを作ってみた

Last updated at Posted at 2018-03-29

概要

ExcelベースのURLリストの情報から自動でサイトを辿り、キャプチャ(PC/SP)を保存する機能です。
同時に保存したキャプチャは、新しく生成したExcelに添付されます。

動作環境

確認済み環境
macOS Sierra 10.12.6
Python 3.5.0
※Windows 確認中

ソースコード

import xlrd
import os
import xlsxwriter
import math
import time
from selenium import webdriver

## -------------------------------------
## ExcelのURLからスクショを保存
## -------------------------------------

## ExcelからURLを取得
book = xlrd.open_workbook('url.xlsx')
sheet = book.sheet_by_index(0)

## 取得した情報を保存しておくための入れ物
IDLIST = []
TITLELIST = []
URLLIST = []

## IDを取得
for row in range(sheet.nrows):
    ## セルの値(URL)を取得
    ID = sheet.cell(row, 0).value
    IDLIST.append(ID)

## タイトルを取得
for row in range(sheet.nrows):
    ## セルの値(URL)を取得
    TITLE = sheet.cell(row, 1).value
    TITLELIST.append(TITLE)

## PCキャプチャ
## ブラウザを起動(ページ全体をキャプチャしてくれるためSafariを使用)
driver = webdriver.Safari()
driver.maximize_window()

##  URLを取得(キャプチャ保存)
for row in range(sheet.nrows):
    ## セルの値(URL)を取得
    URL = sheet.cell(row, 2).value
    URLLIST.append(URL)

    ## 画面遷移
    driver.get(URL)

    ## 遷移直後だと崩れた状態でスクショされる可能性があるため、1秒待機
    time.sleep(1)

    ## 画面キャプチャを保存
    FILENAME = os.path.join(os.path.dirname(os.path.abspath(__file__)), IDLIST[row] + '.png')
    driver.save_screenshot(FILENAME)

## ブラウザを閉じる
driver.quit()

## SPキャプチャ
## ブラウザを起動(ページ全体をキャプチャしてくれるためSafariを使用)
driver = webdriver.Safari()
## UA判定が必要な場合は上記を削除し、以下を使用
# USER_AGENT = "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A356 Safari/604.1"
# driver = webdriver.PhantomJS(desired_capabilities={'phantomjs.page.settings.userAgent': USER_AGENT})
driver.set_window_size(375, 720)

##  URLを取得(キャプチャ保存)
for row in range(sheet.nrows):
    ## セルの値(URL)を取得
    URL = sheet.cell(row, 2).value

    ## 画面遷移
    driver.get(URL)

    ## 遷移直後だと崩れた状態でスクショされる可能性があるため、1秒待機
    time.sleep(1)

    ## 画面キャプチャを保存
    FILENAME = os.path.join(os.path.dirname(os.path.abspath(__file__)), IDLIST[row] + '_sp.png')
    driver.save_screenshot(FILENAME)

## ブラウザを閉じる
driver.quit()


## -------------------------------------
## 保存したスクショをExcelに添付
## -------------------------------------

## 添付した数をカウントするための変数
count = 0

for i in range(math.ceil((row+1)/10)):
    ## 画像添付用のExcelを作成
    workbook = xlsxwriter.Workbook('capture' + str(i+1) + '.xlsx')

    ## 残り添付数を計算
    if (row+1)-count >= 10:
        num = 10
    else:
        num = (row+1)%10

    for j in range(num):
        ## シートを追加
        worksheet = workbook.add_worksheet(IDLIST[count] + '_' + TITLELIST[count])

        ## 対象ページの情報を記載
        worksheet.write('A1', IDLIST[count])
        worksheet.write('A2', TITLELIST[count])
        worksheet.write('A3', URLLIST[count])

        ## 画像を添付
        IMAGE_SP = IDLIST[count] + '_sp.png'
        IMAGE_PC = IDLIST[count] + '.png'
        worksheet.insert_image('B4', IMAGE_SP, {'x_scale': 0.45, 'y_scale': 0.45})
        worksheet.insert_image('H4', IMAGE_PC, {'x_scale': 0.3, 'y_scale': 0.3})

        ## 添付するごとにカウントを増やす
        count = count+1

    ## 10シートごとにExcelを閉じる
    workbook.close()

※キャプチャ保存だけ使用する場合は、「保存したスクショをExcelに添付」以降を削除

導入手順

Python

https://www.python.org/downloads/windows/

3系の最新バージョンをインストール

→「Download Windows x86-64 executable installer」

ターミナルを開いて、以下のコマンドを実行。

$ python —V

バージョンが表示されたらOK。

pip

ターミナルを開いて、以下のコマンドを実行。

$ easy_insatll pip

selenium

ターミナルを開いて、以下のコマンドを実行。

$ pip install selenium

Python ライブラリインストール

ターミナルを開いて「requirements.txt」と同じディレクトリにいる状態で、以下のコマンドを実行。

$ pip install -r requirements.txt

Safari 設定

Safari の「環境設定」から「詳細」タブを開き、「メニューバーに"開発"メニューを表示」にチェック。

表示された「開発」メニューから「リモートオートメーションを許可」にチェック。

使用方法

URLリストの編集

「url.xlsx」に必要な情報を入れてください。
A列:ID
B列:タイトル
C列:URL

実行

ターミナルを開いて、以下のコマンドを実行。

$ python capture.py

まとめ

Python 初心者ということもあり、
泥臭く書いた感があるので、参考程度にお使いいただければ幸いです。

また、Windows の導入手順もまとまり次第アップする予定です。

32
44
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
44