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.

77 lines
2.5 KiB

import { chromium } from "playwright";
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", timeout: 60_000 });
await page.waitForTimeout(2000);
const before = await page.evaluate(() => {
return [...document.querySelectorAll("#origin-zip")].map((el, i) => {
const input = el as HTMLInputElement;
const r = el.getBoundingClientRect();
return {
i,
inMh: !!el.closest("#container-mh"),
visible: r.width > 0 && r.height > 0,
disabled: input.disabled,
value: input.value,
};
});
});
console.log("before LTL:", JSON.stringify(before, null, 2));
await page.locator("#cb_st_ltl").click({ noWaitAfter: true });
await page.waitForTimeout(1500);
await page.locator("#container-mh #origin-zip").waitFor({ state: "visible" });
const after = await page.evaluate(() => {
return [...document.querySelectorAll("#origin-zip")].map((el, i) => {
const input = el as HTMLInputElement;
const r = el.getBoundingClientRect();
return {
i,
inMh: !!el.closest("#container-mh"),
visible: r.width > 0 && r.height > 0,
disabled: input.disabled,
value: input.value,
};
});
});
console.log("after LTL:", JSON.stringify(after, null, 2));
const loc = page.locator("#container-mh #origin-zip").first();
console.log("visible:", await loc.isVisible());
console.log("enabled:", await loc.isEnabled());
try {
await loc.click({ noWaitAfter: true });
await loc.fill("10118", { timeout: 10_000, force: true });
console.log("fill ok, value:", await loc.inputValue());
} catch (e) {
console.log("fill failed:", e instanceof Error ? e.message : e);
}
const loc2 = page.locator("#container-mh #origin-zip").first();
try {
await loc2.click({ noWaitAfter: true });
await loc2.pressSequentially("10118", { delay: 30 });
await loc2.evaluate((el) => {
el.dispatchEvent(new Event("input", { bubbles: true }));
el.dispatchEvent(new Event("change", { bubbles: true }));
el.dispatchEvent(new Event("blur", { bubbles: true }));
});
console.log("sequential ok, value:", await loc2.inputValue());
} catch (e) {
console.log("sequential failed:", e instanceof Error ? e.message : e);
}
await browser.close();
}
main().catch(console.error);