You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
chajia/scripts/probe-priority1-step1-submi...

75 lines
2.8 KiB

import { chromium } from "playwright";
const FEATHERY_CLICK = { noWaitAfter: true as const };
async function featheryFill(
page: import("playwright").Page,
selector: string,
value: string,
): Promise<void> {
const field = page.locator(`#container-mh ${selector}`).first();
await field.click(FEATHERY_CLICK);
await field.fill("");
await field.fill(value);
await field.evaluate((el) => {
el.dispatchEvent(new Event("input", { bubbles: true }));
el.dispatchEvent(new Event("change", { bubbles: true }));
el.dispatchEvent(new Event("blur", { bubbles: true }));
});
}
async function main() {
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage();
await page.goto(
"https://www.priority1.com/instant-freight-quotes/#New%20Step%201",
{ waitUntil: "domcontentloaded" },
);
await page.locator("#container-mh").waitFor({ state: "visible" });
await page.waitForTimeout(1000);
await page.locator("#container-mh #cb_st_ltl").click(FEATHERY_CLICK);
await page.waitForTimeout(800);
await featheryFill(page, "#origin-zip", "10118");
await featheryFill(page, "#destination-zip", "90017");
await page.locator("#container-mh #freight-shipment").selectOption("One Time Shipment");
await featheryFill(page, "#pickup-date", "07/01/2026");
await featheryFill(page, "#business-email", "niqijiti542@gmail.com");
await featheryFill(page, "#client-phone", "5551234567");
const values = await page.evaluate(() => ({
origin: (document.querySelector("#container-mh #origin-zip") as HTMLInputElement)?.value,
dest: (document.querySelector("#container-mh #destination-zip") as HTMLInputElement)?.value,
date: (document.querySelector("#container-mh #pickup-date") as HTMLInputElement)?.value,
email: (document.querySelector("#container-mh #business-email") as HTMLInputElement)?.value,
phone: (document.querySelector("#container-mh #client-phone") as HTMLInputElement)?.value,
ltl: (document.querySelector("#container-mh #cb_st_ltl") as HTMLInputElement)?.checked,
}));
console.log("values:", values);
const btn = page
.locator("#container-mh")
.getByRole("button", { name: /GET INSTANT QUOTES/i })
.first();
console.log("btn visible:", await btn.isVisible());
console.log("btn enabled:", await btn.isEnabled());
await btn.click(FEATHERY_CLICK);
await page.waitForTimeout(3000);
console.log("url:", page.url());
console.log("length visible:", await page.locator("#container-mh #length").isVisible().catch(() => false));
const errors = await page.evaluate(() =>
[...document.querySelectorAll("[class*='error'],[role='alert']")]
.map((e) => e.textContent?.trim())
.filter(Boolean)
.slice(0, 10),
);
console.log("errors:", errors);
await browser.close();
}
main().catch(console.error);