← Files egoARCHIVED FILE
skills/ego-browser/learnings/google/tools/search-extract.js
1.01 KB · Oct 3, 2026 · 06:35 UTC
function boundedInteger(value, fallback, max) {
const number = value === undefined ? fallback : Number(value);
if (!Number.isFinite(number)) return fallback;
return Math.max(1, Math.min(max, Math.trunc(number)));
}
export async function searchAndExtract(ctx, args = {}) {
const query = args.query || "";
const maxResults = boundedInteger(args.maxResults, 10, 100);
if (!query) throw new Error("search query is required");
await ctx.openOrReuseTab(`https://www.google.com/search?q=${encodeURIComponent(query)}`, { wait: true });
await ctx.waitForLoad();
const results = await ctx.js(String.raw`(() => {
const items = [...document.querySelectorAll('div.g')]
return items.slice(0, ${maxResults}).map(el => ({
title: el.querySelector('h3')?.innerText?.trim() || '',
url: el.querySelector('a')?.getAttribute('href') || '',
snippet: el.querySelector('[data-sncf]')?.innerText?.trim() || el.querySelector('span')?.innerText?.trim() || '',
})).filter(r => r.title)
})()`);
return results;
}
SHA-256: 96350a2d6657f8efc79b639b397ba74d9b5af218f12b6261df1f92e0cb493d34