💬
【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