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-submit-erro...

60 lines
2.3 KiB

import { chromium } from "playwright";
const FEATHERY_CLICK = { noWaitAfter: true as const };
async function typeField(page: import("playwright").Page, sel: string, value: string) {
const loc = page.locator(`#container-mh ${sel}`).first();
await loc.click(FEATHERY_CLICK);
await loc.fill("");
await loc.pressSequentially(value, { delay: 30 });
await loc.evaluate((el, v) => {
const input = el as HTMLInputElement;
const setter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value")?.set;
setter?.call(input, v);
input.dispatchEvent(new Event("input", { bubbles: true }));
input.dispatchEvent(new Event("change", { bubbles: true }));
input.dispatchEvent(new Event("blur", { bubbles: true }));
}, value);
}
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();
await page.waitForTimeout(1500);
await page.locator("#container-mh").getByText(/Less Than Truckload/i).first().click(FEATHERY_CLICK);
await page.waitForTimeout(800);
await typeField(page, "#origin-zip", "10118");
await typeField(page, "#destination-zip", "90017");
await page.locator("#container-mh #freight-shipment").selectOption("One Time Shipment");
await typeField(page, "#pickup-date", "07/01/2026");
await typeField(page, "#business-email", "niqijiti542@gmail.com");
await typeField(page, "#client-phone", "5551234567");
const btn = page.locator("#container-mh").getByRole("button", { name: /GET INSTANT QUOTES/i }).first();
await Promise.race([
btn.click({ timeout: 15_000 }).catch(() => undefined),
page.waitForTimeout(15_000),
]);
await page.waitForTimeout(3000);
const diag = await page.evaluate(() => {
const texts = [...document.querySelectorAll("body *")]
.map((el) => el.textContent?.trim() || "")
.filter((t) => /required|invalid|error|please|must/i.test(t) && t.length < 120);
return {
url: location.href,
lengthVisible: !!document.querySelector("#container-mh #length"),
errors: [...new Set(texts)].slice(0, 15),
};
});
console.log(JSON.stringify(diag, null, 2));
await browser.close();
}
main().catch(console.error);