💬

【PlayWright】Pythonプログラムを呼び出す

に公開

概要

Webの自動化中にこっそり python を実行したいことありませんか。
今回はその方法を紹介!!

サンプルコード

const { test, expect, chromium } = require('@playwright/test');
const { exec } = require('child_process');

test('サンプルサイトを開いてPythonスクリプトを実行する', async () => {
  // ブラウザをデバッグモードで起動
  const browser = await chromium.launch({ headless: false, slowMo: 50 });
  const context = await browser.newContext();
  const page = await context.newPage();

  // サンプル用のサイトを開く
  await page.goto('https://example.com'); // 簡単な試験用サイト

  // 指定したPythonファイルを実行
  const pythonFilePath = '/private/tmp/sample.py'; // 実行するPythonファイルのパス
  exec(`python ${pythonFilePath}`, (error, stdout, stderr) => {
    if (error) {
      console.error(`エラーが発生しました: ${error.message}`);
      return;
    }
    if (stderr) {
      console.error(`標準エラー出力: ${stderr}`);
      return;
    }
    console.log(`標準出力: ${stdout}`);
    console.log("実行完了");
  });

  // サイトが正しく開けたことを確認
  await expect(page).toHaveTitle(/Example Domain/);

  // ブラウザを閉じる
  await browser.close();
});

実行例

$ npx playwright test call_python.spec.js

Running 1 test using 1 worker

  ✓  1 …l_python.spec.js:4:1 › サンプルサイトを開いてPythonスクリプトを実行する (3.5s)
標準出力: test

実行完了

  1 passed (3.8s)
$ 

利用例

・裏で python を実行してWebなどで結果を見たい時など。
(裏でPython実行、PlayWrightで新しい要素がWEBに出てきていないかを確認する処理を追加すれば実現可能)

補足

・デバック用にWebサイトが開く設定にしています。(目視確認できるようにするため。)
・/private/tmp/sample.py は“test” と標準出力するだけ。

Discussion