Web チェック・プログラム

 

【機能】

・Web画面の文字変化があった時にブザーを鳴らします。確認周期は約1分30秒に設定しています。

・Webの任意のURL設定を設定するだけで動作するはずです。

・Windows11の64Bit-CPUで動作するプログラムですが、下記のDOS風の単純な画面です。

・下記は3回目で画面文字の変化があったサンプル画像です。

 

【設定の変更】

・Windows11、64Bit-CPUの実行形式(**.exe)で提供します。プログラムのダウンロードはここ。

Web-Check.zipを解凍すると、次の3本のファイルがあり「任意のフォルダ」に格納してください。

===============================================「任意のフォルダ」に格納

  GIA-Chrome-Sub.exe    (実行プログラム)

  GIA-set1.txt       (設定ファイル)

最初にお読みください.txt (説明資料)

------------------------

Web-html-1.html (プログラム起動で新規に作成)

Web-txt-1.txt  (プログラム起動で新規に作成)

===============================================以上が「任意のフォルダ

 

・「GIA-set1.txt」設定ファイルの1行目に下記データがあります。

1行目の "**" の中のデータを、自分が確認したいWebのURLに変更する。

その他はできるだけ変更しないでください。

url1 = "https://unitednetwork.earth/categories/gia-reports"

・プログラムを起動すると「任意のフォルダ」の中に「Web-html-1.html」として初期画面が格納されます。

URLを変更した時は必ず、「Web-html-1.html」をダブルクリックし期待するWEb画面が読み取られていることを、確認してください。

 

注1)「Chrome」アプリが自分のPCにインストールしてあることが「必要」です。Chromeの表示読み取り関数を使っているためです。

 

【プログラム起動】

・「GIA-Chrome-Sub.exe」を右クリックし、「管理者として実行」をクリックする。最初に2回以上実行が必要です。

起動用「ショートカット」を作成すればダブルクリックだけで起動するかもしれません。

・1分30秒周期でWebの画面文字の変化を確認開始する。

・画面文字が変化すると5回のビープ音が鳴ります。次の、1分30秒周期でまた5回のビープ音が鳴ります。

・プログラム起動時の初回だけ、指定URLの画面文字を記録します。初回の画面文字と変化があるかを確認しています。

 指定したWeb画面をプログラム起動時に1回だけ「目視で確認」したほうが安心できます。

 

【プログラム終了】

・「コマンド」画面の右上の「×」を「2回」以上押す。スリープ・モードで動作しているため、30秒程度は応答が無い可能性があります。しばらく待ってください。

 

特徴

(1)1分周期でWeb画面の画面文字を読み取り、文字が変化した時にブザーを鳴らします。
なお、イメージ画像だけが変化しても反応しません。

(2)Javaなどで構成されたWeb画面などあらゆる画面で動作ができます。
その理由はWeb表示の「Chrome」アプリ関数を起動し流用しているためです。

(3)確認WebのURLは初期設定により、任意に設定ができます。

(4)「CPU負荷」と「Diskなどハード負荷」が極力少なくなるようにしています。
画像は読み込んでおらず、URLだけの読み込みで、「読み込み回線負荷」が少ない。
このプログラムを動作させながら、「Chrome」アプリを含め、他のプログラムも通常に動作します。

 

 

Pythonでのプログラミング

・Pythonでプログラムが出来ており、昔の「DOS」のような簡単なプログラムです。
・開発環境を含め、関連するプログラムは全て無料で入手できます。

・このプログラムはAIの「ChatGBT」が作っています。エラーが発生したら、「ChatGBT」に確認してください。

たぶん、Pythonプログラムをコピーする場合は、自分のPC内部の関数不足がある可能性があります。その場合、関数をロードする。

・GIAレポートのWebサイトはJavaで構成されているようで、「ChatGBT」に色々なことを聞いて2週間ほどかかりました。

 

【前提条件:Pythonでのプログラミング

(1)「Chrome」アプリがインストールされていること。「Chrome」アプリを起動する必要はありません。

(2)「Python」をインストール。

(3)「jupyter lab」をインストール。

(4)「JupyterLab」フォルダを作成。場所はどこでも良い。名称は任意。

(5)「JupyterLab」フォルダに次のファイルが存在すること。
====================(「JupyterLab」フォルダ)
01-jupyterlab.bat
GIA-Chrome-Sub.bat
GIA-Chrome-Sub.ipynb
GIA-Chrome-Sub.py
GIA-set1.txt
(下記は自動作成される)
Web-html-1.html
Web-txt-1.txt
====================(以上が「JupyterLab」フォルダ)

(6)「01-jupyterlab.bat」は次の文字を記述する。
====================(「01-jupyterlab.bat」ファイル)
jupyter lab
====================(以上が「01-jupyterlab.bat」ファイル)

(7)「GIA-set1.txt」は次の文字を記述する。
====================(「GIA-set1.txt」ファイル)
url1 = "
https://unitednetwork.earth/categories/gia-reports"
url2 = "https://unitednetwork.earth/categories/gia-reports?search=**-FEB-25"
web-html-1 = "Web-html-1.html"
web-html-2 = "Web-html-2.html"
web-txt-1 = "Web-txt-1.txt"
web-txt-2 = "Web-txt-2.txt"
file-test-1 = "Not-file-test"
====================(以上が「GIA-set1.txt」ファイル)

特記1:「url1」に90秒周期で確認したいWebサイトのURLを記述する。
特記2:「url2」はダミーのURLで何でも良い。
特記3:「web-html-1」は初回のWebサイトのデータを格納するファイル名称です。
特記4:「web-html-2」は2回目以降のWebサイトのデータを格納するファイル名称です。デバッグ・モードの時のみ有効。
特記5:「web-txt-1」は初回のWebサイトの表示文字だけを抜き取ったデータを格納するファイル名称です。
特記6:「web-txt-2」は2回目以降のWebサイトの表示文字だけを抜き取ったデータを格納するファイル名称です。デバッグ・モードの時のみ有効。
特記7:「file-test-1」が「"file-test"」の場合はデバッグ・モード指定です。「"Not-file-test"」の場合はデバッグ・モード指定ではなく、2回目以降のWeb読み取りでファイルには書き込まず、メモリ空間のワーク領域だけの処理となります。

(8)「GIA-Chrome-Sub.ipynb」はPythonのプログラムです。次を記述する。

ただし、下記は jupyter lab を起動し「GIA-Chrome-Sub.ipynb」のファイルを作成して下記をコピーする。

====================(「GIA-Chrome-Sub.ipynb」ファイル:ソースコード

 

# ========================================

# GIA_Chrome_sub (2025/1/14)動作確認

# ========================================

 

import os

import winsound

import time

import re

from difflib import Differ

 

from selenium import webdriver

from selenium.webdriver.chrome.service import Service

from selenium.webdriver.common.by import By

from selenium.webdriver.chrome.options import Options

from webdriver_manager.chrome import ChromeDriverManager

from datetime import datetime

 

# 「Chromedriverのダウンロードとバージョン管理」

def setup_chromedriver():

    print("Chromedriverのダウンロードとバージョン管理を実行")

    chrome_options = Options()

    chrome_options.add_argument('--headless')

    chrome_options.add_argument('--disable-gpu')

    chrome_options.add_argument('--no-sandbox')

    chrome_options.add_argument('--disable-dev-shm-usage')

    service = Service(ChromeDriverManager().install())

    return webdriver.Chrome(service=service, options=chrome_options)

 

# 「Webデータの取得と処理」

def process_web_data(driver, url):

    driver.get(url)

    time.sleep(30)  # 30秒待機

 

    content = driver.page_source

    content_filtered = clean_content(content)

    text_only = driver.find_element(By.TAG_NAME, "body").text

    return content_filtered, text_only

 

 

# 「コンテンツのフィルタリング」

def clean_content(content):

    content = re.sub(r"pixel_session=.*?//]]>", "", content, flags=re.DOTALL)

    content = re.sub(r"csrf-token.*?/>", "", content, flags=re.DOTALL)

    content = re.sub(r"authenticity_token.*?/>", "", content, flags=re.DOTALL)

    # content = re.sub(r"&search=.*?\">", "", content, flags=re.DOTALL)

    content = content.replace("\u00A9", "")

    return content

 

# 「ビープ音」(Windows OS)

def beep_5(kai2,hertz2):

    count2 = kai2

    frequency = hertz2  # ビープ音の周波数(ヘルツ)

    duration = 500  # ビープ音の長さ(ミリ秒)

 

    for i in range(count2):

        winsound.Beep(frequency, duration)  # ビープ音を鳴らす

        time.sleep(0.5)  # 次のビープ音までの間隔(秒)

 

# 「初期設定の読み取り」

def read_initial_values(file_path):

    variables = {}

    with open(file_path, "r", encoding="utf-8") as f:

        for line in f:

            line = line.strip()

            if line and "=" in line:

                key, value = map(str.strip, line.split("=", 1))

                variables[key] = value.strip('"')

    return variables

 

# ファイル読み取り

def load_file_to_memory(file_path):

    try:

        with open(file_path, 'r', encoding='utf-8') as file:

            return file.read()

    except Exception as e:

        print(f"Error: {e}")

        return None

 

 

# 「メイン処理」

def main():

 

    print("「ビープ音」を確認のため3回鳴らします。")

    # ビープ音

    beep_5(3,1000)

   

    # 「Chromedriverのダウンロードとバージョン管理」

    driver = setup_chromedriver()

    time.sleep(30)  # 30秒

 

# 「初期値を読み取る」

    initial_values = read_initial_values("GIA-set1.txt")

    for key, value in initial_values.items():

        print(f"{key}: {value}")

 

    # 初期変数のセットアップ

    url1 = initial_values["url1"]

    url2 = initial_values["url2"]

    web_html_1 = initial_values["web-html-1"]

    web_html_2 = initial_values["web-html-2"]

    web_txt_1 = initial_values["web-txt-1"]

    web_txt_2 = initial_values["web-txt-2"]

    file_test_1 = initial_values["file-test-1"]

 

    # 初回データ取得

    m_web_html_1, m_web_txt_1 = process_web_data(driver, url1)

    print("m_web_html_1, m_web_txt_1 を読み込みました。")

 

    with open(web_html_1, "w", encoding="utf-8") as f:

        f.write(m_web_html_1)

    print(f"{web_html_1} にデータを格納しました。")

 

    with open(web_txt_1, "w", encoding="utf-8") as f:

        f.write(m_web_txt_1)

    print(f"{web_txt_1} にデータを格納しました。")

    time.sleep(30)  # 30秒

    kaisu1 = 0

 

 

# Webの変化を無限確認

 

    while True:

      kaisu1 += 1

      now = datetime.now()

      print(f"回数: {kaisu1}","       時分秒=",now.strftime("%H:%M:%S"))

       

      # 初回データ取得

      m_web_html_2, m_web_txt_2 = process_web_data(driver, url1)

      print("Webからメモリ(m_web_html_2, m_web_txt_2)に読み込みました。")

 

      #テスト・モードのみ2回目以降でファイルに書き込み。

      if file_test_1 == "file-test":

        print("「file-test」の指定がありファイルに書き込みます。")

        with open(web_html_2, "w", encoding="utf-8") as f:

          f.write(m_web_html_2)

        print(f"{web_html_2} にデータを格納しました。")

 

        with open(web_txt_2, "w", encoding="utf-8") as f:

          f.write(m_web_txt_2)

        print(f"{web_txt_2} にデータを格納しました。")

 

      # if m_web_html_1 == m_web_html_2: 「html」形式はNLなど微妙に一致しない。

      if m_web_txt_1 == m_web_txt_2:

        print("Webに表示された文字に変化がありませんでした。")

      else:

        print("Webに表示された文字に変化がありました!!!!!!!!!!")

        diff_start = next((i for i, (a, b) in enumerate(zip(m_web_txt_1, m_web_txt_2)) if a != b), None)

        print(f"変化のあった場所: {diff_start}文字目")

        print(f"前のデータ: {m_web_txt_1[max(0, diff_start-15):diff_start+15]}")

        print(f"後のデータ: {m_web_txt_2[max(0, diff_start-15):diff_start+15]}")

 

        with open(web_html_2, "w", encoding="utf-8") as file:

           file.write(m_web_html_2)

        with open(web_txt_2, "w", encoding="utf-8") as file:

           file.write(m_web_txt_2)

        print("変化データを html_2 と txt_2 ファイルに書き込みました。")

 

        # ビープ音

        beep_5(5,1000)

 

      time.sleep(60)  # 60秒

      # if file_test_1 == "file-test":  「無条件の実行」

      m_web_html_1 = load_file_to_memory(web_html_1)

      m_web_txt_1  = load_file_to_memory(web_txt_1)

      print("無条件で初期値をファイルからメモリに再読み込み。")

      # 以上「while True:」までの無限ループ

 

if __name__ == "__main__":

    main()

    driver.quit()  # Chromedriverの終了

 

    print("GIA_Chrome_sub を終了しました。")

 

 

====================(以上が「GIA-Chrome-Sub.ipynb」ファイルソースコード

 

【補足1】

1.上記「01-jupyterlab.bat」をダブルクリックでプログラム起動をすると下記のJupyterLab画面が表示されます。

2.上記「GIA-Chrome-Sub.ipynb」ソースコードの入力が完了したJupyterLab画面が下記です。
この画面からでもPythonプログラムを実行できます。Runの「▶」を押せば実行します。

 

・実行形式EXEプログラム: https://timst.sakura.ne.jp/999/Web-Check.zip

   以上

 

著者:TimST (改変は自由のフリーソフトです。) 2025/02/24版

 

リンクに戻る。

人類復興計画」に戻る。