torinaブログ

DjangoとBootstrap4で作成したブログ
Python, Django, Kivy, Bootstrap, Apache等のメモです
ソースコード

Python、Selenium、PhantomJSで一定の時間毎にスクリーンショット

Python Pythonスクレイピング
約341日前 2016年3月22日22:44
Selenium、PhantomJSを使い、指定したサイト達を一定の時間ごとにスクリーンショットしてくる、というものを考えます

今回はスクリーンショットしたいサイトをテキストファイルに書いていきます
テキストファイルの中身はこのように
サイトURL、スクショする間隔(秒)、スクショとして保存するファイル名です
https://www.google.co.jp/?gws_rd=ssl 60 google
http://www.yahoo.co.jp/ 60 yahoo


スクショ間隔をサイト毎に変えており、調整が難しそうだなぁと思ったので
サイト毎にスレッドを作成し、単純にtime.sleep()とすることにしました

全コード
import time
import threading
from datetime import datetime
from selenium import webdriver


class ScreenShotWorker(threading.Thread):

    lock = threading.Lock()

    def __init__(self, driver, url, wait, name, daemon=True):
        threading.Thread.__init__(self, daemon=daemon)
        self.driver = driver
        self.url = url
        self.wait = wait
        self.name = name

    def run(self):
        while True:
            self.capture()
            time.sleep(self.wait)

    def capture(self):
        with self.lock:
            self.driver.get(self.url)
            self.driver.save_screenshot(
                "{0}{1.year}{1.month}{1.day}{1.hour}{1.minute}{1.second}.png"
                .format(self.name, datetime.now())
            )


def main():

    driver = webdriver.PhantomJS()

    try:
        with open("url.txt", "r") as file:
            for line in file:
                url, wait, name = line.split()
                worker = ScreenShotWorker(
                    driver=driver, url=url, wait=int(wait), name=name)
                worker.start()

        while True:
            print("exitで終了")
            comand = str(input())
            if comand == "exit":
                break
    finally:
        driver.quit()


if __name__ == "__main__":
    main()



テキストファイルの中身


作成したフォルダです


さっそく実行します



今回はyahooとgoogleのスクショです。ちゃんと作成されています


中身もOKですね