pythonでChromeHeadless使ってスクショしてみた

RPAが流行っているみたいだけど。色々(コストの問題)とあって導入できないので、なんか解決につながるような方策ないかなぁと思っていたら。pythonゴニョゴニョすればうまくいけば自分の労力のみでRPA入れられるんではないかと思って、調査。
その気になればEXCELからURLリストと拾ってくる項目名とか指定して、取得した値をEXCELに転記とかいうこともできるのではなかろうかと思って、少し試してみた。
まずはSIerさんが大好きなWebアプリのスクショを取る部分について試してみることにした。色々とアレンジがいるみたいなので、まずはGoogle検索で「yahoo」を検索した1ページ目のスクショを取得するとかいうサンプルを作ってみた。
まぁこれは色々と先人がやっているので、そいつをコピペっとしただけなので、またしてもゴミ記事を量産したわけですww

◆事前準備

1.Chromeインストールとフォントの準備

# Chrome Install
$ curl https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -   
$ echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | sudo tee /etc/apt/sources.list.d/google-chrome.list
$ sudo apt update
$ sudo apt -y install google-chrome-stable
# IPA Font Install
$ sudo apt install -y fonts-ipafont
$ fc-cache -fv
$ fc-list | grep -i ipa

2.追加ライブラリのインストール

$ pip install --upgrade selenium
$ pip install --upgrade chromedriver-binary
$ pip install --upgrade pyvirtualdisplay

◆ソース

import chromedriver_binary
import datetime
from pyvirtualdisplay import Display
import subprocess
import time

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

chrome_path = '/usr/bin/google-chrome'

def operateBrawser(driver, url):
    driver.get(url)
    #指定された要素(検索テキストボックス)がDOM上に現れるまで待機する
    MAX_WAIT_TIME_SEC = 100
    INPUT_BOX_CLASS_NAME = "gLFyf"
    element = WebDriverWait(driver, MAX_WAIT_TIME_SEC).until(
            EC.presence_of_element_located((By.CLASS_NAME,
                INPUT_BOX_CLASS_NAME)))
    #Google検索でyahooを検索する
    search_box = driver.find_element_by_name("q")
    search_box.send_keys('yahoo')
    search_box.submit()
    return driver

def screenShot(driver, filename):
    w = driver.execute_script("return document.body.scrollWidth;")
    h = driver.execute_script("return document.body.scrollHeight;")
    driver.set_window_size(w,h)
    driver.save_screenshot(filename)
    return driver

def main():
        options = webdriver.ChromeOptions()
        options.binary_location = chrome_path
        options.add_argument('--headless')
        options.add_argument('disable-infobars')
        options.add_argument('--disable-extensions')
        options.add_argument('--no-sandbox')
        options.add_argument('--disable-gpu')
        options.add_argument('--disable-dev-shm-usage')
        options.add_argument('--remote-debugging-port=9222')
        driver = webdriver.Chrome(options=options)
        #ブラウザで操作したいURLを指定
        url = "https://google.co.jp/"
        driver = operateBrawser(driver,url)
        #スクリーンショット
        current_time = datetime.datetime.today()
        current_time_str = current_time.strftime("%Y%m%d%H%M%S")
        file_name=(f'screenshot-full-{current_time_str}.png')
        driver = screenShot(driver, file_name)
        driver.quit()

if __name__ == '__main__':
   main()

◆参照URL

https://qiita.com/memakura/items/20a02161fa7e18d8a693
https://jitaku.work/it/os/linux/ubuntu/ipa/
https://qiita.com/shinsaka/items/37436e256c813d277d6d
https://qiita.com/tabimoba/items/4ea3404416142187e645
https://qiita.com/promitsu/items/4b915677e1d4e9e21ca2
https://qiita.com/derodero24/items/17f24ed59d4f5650b3f5
https://note.com/tamurasann/n/nb54c9ef245cf

とりあえず「operateBrawser」の中で操作したい動作をゴニョゴニョと書いて
操作の都度「screenShot」を呼び出していくという風にすれば自動操作して
スクショはできそうですな。
あれですよ。ブラウザをスクショしてアリバイ工作のための納品物を作るという
丁寧にやらないといけない作業に最適ですな。
こいつとEXCEL出力組み合わせたら、システムテストやりましたのアリバイ工作に
最適なのではないでしょうか。
まぁ、これ調べたのはもう少し別のことしたいからなのですがね。

コメント

このブログの人気の投稿

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

証券外務員1種勉強(計算式暗記用メモ)

マクロ経済学(IS-LM分析)