見出し画像

PlaywrightでFirefoxを自動化するテクニック

Playwrightについて

Puppeteerと互換性がありつつも、独自の発展もしているブラウザを自動操縦する為のライブラリがこのPlaywright
PuppeteerがChromeをターゲットにしてるのに対して、こちらはFirefoxやSafariも操作する事が可能

ただ、完全互換ではなく方向性の違い故にメソッドやテクニックが異なるものがあるので、注意が必要。

SeleniumPower Automate Desktopなどブラウザ操作をするものが増えてきていますが、プログラムでゴリゴリ構築するならPuppteerとPlaywrightがオススメ。業務自動化に貢献します。

ソースコード

Firefoxを動かすといっても、playwrightで使えるjugglerと呼ばれる特殊な版のFirefoxが必要。npm i playwrightでインストール時にChromium, firefox, webkitがダウンロードされる仕組みになってる。
Puppeteerと違い、情報量が少ないのが難点。とりあえず、ファイルをダウンロードするテクを作ってみた。

//firefoxで起動する
const { firefox } = require('@playwright/test');
 
//ファイルの読み書きモジュール
const fs = require('fs');
 
//デスクトップのパスを取得
var dir_home = process.env[process.platform == "win32" ? "USERPROFILE" : "HOME"];
var dir_desktop = require("path").join(dir_home, "Desktop"); 
 
(async () => {
	//ブラウザオプションを指定する
	const browser = await firefox.launch({
		acceptDownloads: true,        //ダウンロードの許可
		downloadsPath: dir_desktop,   //ダウンロード先の指定
		headless : false,
		slowMo:500
	});
 
	//新しいページを追加
	const page = await browser.newPage();
 
	try {
		//ブランクページを開く
		await page.goto('about:blank');
 
		//ダウンロードイベントを定義
		var event = page.waitForEvent('download');
 
		//ファイルを開いてダウンロードする
		await page.goto('https://officeforest.org/wp/library/note.odg');
 
		//ダウンロードイベントを待機
		var download = await event;
		var downloadError = await download.failure();
		if (downloadError != null) throw new Error(downloadError);
 
		//ダウンロードしたテンポラリファイルのパスを指定
		var result = await download.path();
 
		//テンポラリファイルをリネームする
		fs.renameSync(result,dir_desktop+"\\test.odg");
 
		//ブラウザを閉じる
		await browser.close();
	} catch (e) {
		//エラー発生時の処理
		console.error('CAUGHT JS-EXCEPTION: ' + e.name + '\n' + 'MESSAGE: ' + e.message + '\n' + 'LINE: ' + e.lineNumber + '\n' + 'STACK: ' + e.stack + '\n');
	}
 
})();

詳細や解説・応用編はこちら

サイトではPuppeteerに関する様々なテクニックや実務で使ってるコードを掲載しています。pkgにてEXE化といった小技も紹介しています。

#スクレイピング #Chrome #Safari #Firefox #Devtools #自動化 #ブラウザ #Node .js


この記事が気に入ったらサポートをしてみませんか?