【pywebview】PythonからJavaScriptを実行する

【pywebview】PythonからJavaScriptを実行する プログラミング

「PythonのGUIアプリからWebページにアクセスしたい」
「PythonからJavaScriptを実行したい」
「pywebviewの使い方を知りたい」

このような場合には、この記事の内容が参考となります。
この記事では、Python(pywebview)からJavaScriptを実行する方法を解説しています。

本記事の内容

  • Webページへアクセス
  • PythonからJavaScriptの実行
  • PythonからJavaScriptの実行(戻り値がある場合)

それでは、上記に沿って解説していきます。

Webページへアクセス

JavaScriptを実行する対象のWebページへアクセスします。
もちろん、pywebviewのインストールは必須です。

Webページへアクセスするコードは、以下。
アクセス先は、Example Domainです。

import webview

URL = 'https://example.com/'

if __name__ == '__main__':
    window = webview.create_window('PythonからJavaScriptを実行する', url=URL, height=400)
    webview.start()

上記を実行すると、次の画面が表示されます。

単純に、Example Domainの内容を表示しているだけです。
まずは、動作確認を兼ねてWebページへのアクセスを行いました。

以上、Webページへアクセスについて説明しました。
次は、PythonからJavaScriptの実行を行います。

PythonからJavaScriptの実行

JavaScriptの実行だけなら、別にそれほど難しくはありません。
例えば、Tampermonkeyを使えば簡単にJavaScriptを実行できます。

また、ChromeデベロッパーツールからでもJavaScriptが実行可能です。

これはこれで役に立ちます。
手軽にできるという意味では、効果的な手段です。

そして、今回はPythonからJavaScriptを実行します。
PythonからJavaScriptを実行できれば、いろいろと可能性は広がります。

そのためのコードは、以下となります。

import webview

URL = 'https://example.com/'


def evaluate_js(window):
    window.evaluate_js(
        r"""
        document.querySelector('h1').innerText = "Pythonからh1を変更";
        """
    )

if __name__ == '__main__':
    window = webview.create_window('PythonからJavaScriptを実行する', url=URL, height=400)
    webview.start(evaluate_js, window)

実行する処理は、window.evaluate_js()に記述します。
上記コードを実行した結果、次の画面が表示されます。

PythonからJavaScriptを実行できています。
ただ、JavaScriptから戻り値が欲しいケースもあるでしょう。

次は、戻り値を取得するための方法を確認します。

PythonからJavaScriptの実行(戻り値がある場合)

戻り値を取得する場合のサンプルコードは、以下。

import webview

URL = 'https://example.com/'


def evaluate_js(window):
    result = window.evaluate_js(
        r"""
        document.querySelector('h1').innerText = "Pythonからh1を変更";
        
        //タイトル取得
        let title =  document.querySelector('title').innerText;
        "タイトル:" + title;
        """
    )
    print(result)

if __name__ == '__main__':
    window = webview.create_window('PythonからJavaScriptを実行する', url=URL, height=400)
    webview.start(evaluate_js, window)

上記コードの実行結果は、先ほどとGUI画面上では同じです。
ただし、コンソール上には次のように表示されています。

タイトル:Example Domain

コード上のポイントは、2点あります。

  • window.evaluate_jsの結果を変数に格納
  • JavaScriptにおける最終行の値

それぞれを下記で説明します。

window.evaluate_jsの結果を変数に格納

次のようにresult変数に結果が入るようにしています。

result = window.evaluate_js(

これ以上は、説明は不要でしょう。

JavaScriptにおける最終行の値

こちらの方は、説明が必要になります。
最終行に記載された値が、Pythonへの戻り値です。

例えば、次のようにJavaScriptコード部分を変更したとします。
コードの場所は、Python上であることに注意です。

    result = window.evaluate_js(
        r"""
        document.querySelector('h1').innerText = "Pythonからh1を変更";
        
        //タイトル取得
        let title =  document.querySelector('title').innerText;
        "タイトル:" + title;
        1
        2
        3
        """
    )

この場合の戻り値は、最終行の「3」となります。
数値、文字列、変数のなんでもOKのようです。
若干、違和感がありますが慣れるしかありませんね。

以上、PythonからJavaScriptの実行について説明しました。

タイトルとURLをコピーしました