ワーカーを使うと、Guida はキュー項目を並列処理できます。各ワーカーは独自のブラウザータブとキュー項目文脈を受け取ります。
// 並列ワーカー - キュー項目を同時処理する//// ワーカーはキュー項目を並列に処理し、それぞれが専用の// ブラウザータブを使います。このスクリプトは、複数タブで// キューを処理するワーカープールを設定します。// 開いているワークスペースが必要です。
const queueName = "sites_to_check";
// まず作業項目をキューに入れるconst sites = [ { url: "https://example.com", name: "Example" }, { url: "https://httpbin.org", name: "HTTPBin" }, { url: "https://jsonplaceholder.typicode.com", name: "JSONPlaceholder" }];
for (const site of sites) { g.queue.enqueue(queueName, site);}g.log("サイトをキューに追加しました: " + sites.length + " 件");
// 2 つの同時タブを持つワーカープールを起動する// 各ワーカーは項目ごとに 'scripts/check-site.js' を実行するg.workers.start({ clearTabs: true, layout: "vertical", workers: [{ queue: queueName, script: "scripts/check-site.js", concurrency: 2, throttle: { requestsPerMinute: 30 } }]});
g.log("ワーカープールを起動しました。Task Manager ペインを確認してください。");g.log("ワーカーは項目を独立して処理します。");g.log("進行状況は g.workers.status() で確認できます。");g.log("プールを止めるには g.workers.stop() を使います。");
// ---- scripts/check-site.js には次のように書きます: ----//// // ワーカー文脈(割り当てられたタブ + キュー項目)を取得する// const ctx = g.worker.getContext();// const tabOpts = { browserTabId: ctx.tabId };//// // ワーカー専用タブで移動する// await g.nav.navigateToUrl(ctx.item.data.url, tabOpts);//// // ページからデータを抽出する// const title = await g.page.executeJS("document.title", tabOpts);//// // 結果をストアへ保存する// g.store.put("site_checks", ctx.item.data.name, {// title: title,// url: ctx.item.data.url,// checkedAt: new Date().toISOString()// });//// // 項目をキューから削除するため commit する(必須)// g.queue.commit(ctx.item.id);