【JavaScript】Playwrightのevaluateはクロージャ諸々使えない
こんにちは、フリーランスエンジニアの太田雅昭です。
Playwright
PlaywrightはChromiumを使えるJavaScriptライブラリです。
evaluate
ブラウザ内でJavaScriptを実行する場合に、evaluateを使用します。
const href = await page.evaluate(() => document.location.href);
公式サイトによれば、asyncも使えるようです。
const status = await page.evaluate(async () => {
const response = await fetch(location.href);
return response.status;
});
中でconsole.logを使っても、外には反映されません。
const href = await page.evaluate(() => console.log('abc'));
また、クロージャは動きません。悲しい。
const data = 'some data';
const result = await page.evaluate(() => {
// WRONG: there is no "data" in the web page.
window.myApp.use(data);
});
データを中に渡すには、以下のようにします。
const data = 'some data';
// Pass |data| as a parameter.
const result = await page.evaluate(data => {
window.myApp.use(data);
}, data);
外に色々なデータを出したいときは、構造体を使うとよさそうです。
const result = await page.evaluate(() => {
return {
data: 'aaa',
logs: ['log1', 'log2'],
}
});