34 lines
1.5 KiB
TypeScript
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); });
|