Files
ai-job-search-app/scripts/csc-search.ts

34 lines
1.5 KiB
TypeScript

/** Search the CSC job portal for a position keyword. Usage: npx tsx scripts/csc-search.ts "Computer Programmer" */
import { chromium } from "playwright";
async function main() {
const keyword = process.argv[2] ?? "Computer Programmer";
const browser = await chromium.launch({ headless: true });
const ctx = await browser.newContext({
userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
viewport: { width: 1366, height: 900 },
});
const page = await ctx.newPage();
await page.goto("https://csc.gov.ph/career/", { waitUntil: "domcontentloaded", timeout: 60000 });
await page.waitForTimeout(4000);
await page.fill("#col2_filter", keyword);
await page.click('button[name="sort_list"]', { noWaitAfter: true });
await page.waitForLoadState("domcontentloaded");
await page.waitForTimeout(6000);
// Show up to 100 rows if a length selector exists.
const len = page.locator('select[name="jobs_length"]');
if (await len.count()) {
await len.selectOption("100").catch(() => {});
await page.waitForTimeout(3000);
}
const rows = await page.locator("table tbody tr").allInnerTexts();
console.log(`rows: ${rows.length}`);
for (const r of rows.slice(0, 60)) console.log("• " + r.replace(/\s*\n\s*/g, " | ").slice(0, 300));
await page.screenshot({ path: "scripts/csc-search.png", fullPage: true });
await browser.close();
}
main().catch((e) => { console.error(e); process.exit(1); });