เพลย์ไรท์ ทดสอบคอมมอนคอมพลิเค็ต: ข้อความผิดพลาด 3 ข้อนี้ ง่ายที่จะล้ม
เพลย์ไรท์ ทดสอบคอมมอนคอมพลิเค็ต: ข้อความผิดพลาด 3 ข้อนี้ ง่ายที่จะล้ม
เพลย์ไรท์เป็นเครื่องมือปรับอัตโนมัติของเบราว์เซอร์สมัยใหม่ แต่คนจํานวนมากก้าวเข้ามา และวันนี้ผมจะจัดการ กับความผิดพลาด 3 อย่างที่เกิดขึ้นบ่อยที่สุด และผมจะช่วยคุณหลีกเลี่ยงหลุมนั่น
ผิดพลาด 1: ปฏิบัติการโดยไม่รอการโหลดธาตุ
นี่เป็นหลุมที่ธรรมดาที่สุด คนจํานวนมากเขียนรหัสที่ดูโอเค แต่ให้พวกเขาผิดelement not foundฉันไม่รู้
ผิดพลาด:
await page.click("#submit-btn");
ปัญหาอยู่ที่ว่า ไม่โหลดหน้านั้น และปุ่มนี้ยังไม่มีอยู่
ฝึกที่ถูกต้อง:
await page.waitForSelector("#submit-btn");
await page.click("#submit-btn");
หรือแบบสมัยใหม่มากกว่า
await page.locator("#submit-btn").click();
ตําแหน่งของเพลย์ไรท์ จะรอให้ธาตุต่างๆ โต้ตอบโดยอัตโนมัติ ซึ่งถือเป็นข้อได้เปรียบอย่างมาก
ผิดพลาด 2: ละเลยการรอการโหลดแบบไม่ตายตัว
หลายเว็บไซต์ใช้จาวาสคริปต์แบบไม่คงที่เพื่อแสดงเนื้อหา สคริปต์ของคุณอาจจะเริ่มการทํางานการดึงข้อมูล ก่อนที่เนื้อหาจะถูกโหลด
ผิดพลาด:
await page.goto("https://example.com");
const text = await page.textContent(".dynamic-content");
console.log(text); // 可能是 null 或空字符串
ฝึกที่ถูกต้อง:
await page.goto("https://example.com");
await page.waitForLoadState("networkidle");
const text = await page.textContent(".dynamic-content");
console.log(text);
หรือธาตุเฉพาะ:
await page.locator(".dynamic-content").waitFor({ state: "visible" });
const text = await page.textContent(".dynamic-content");
ข้อผิดพลาดที่ 3: วงจรชีวิตและหน้าของเบราว์เซอร์ยังไม่ถูกประมวลผลอย่างถูกต้อง
หลาย คน สร้าง ตัว อย่าง ของ เบราว์เซอร์ และ ลืม ปิด ตัว มัน ทํา ให้ ความ จํา รั่ว. หรือปิดเว็บเบราว์เซอร์ผิดเวลา ทําให้สคริปต์ล่ม
ผิดพลาด:
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto("https://example.com");
// 忘记关闭浏览器
ฝึกที่ถูกต้อง:
const browser = await chromium.launch();
try {
const page = await browser.newPage();
await page.goto("https://example.com");
// 你的操作
} finally {
await browser.close();
}
หรืออย่างสง่างามกว่านั้น
const browser = await chromium.launch();
const context = await browser.newContext();
const page = await context.newPage();
try {
await page.goto("https://example.com");
// 你的操作
} finally {
await context.close();
await browser.close();
}
สรุป
แกนเพลย์ไรท์คือเดี๋ยวก่อนถึงการจัดการวงจรชีวิตฉันไม่รู้ จําจุดสามจุดนี้
- รอจนกว่าธาตุจะถูกโหลด
- เนื้อหาแบบไม่ตายตัวต้องถูกมองเห็น
- จดจําการปิดเบราว์เซอร์และบริบท
วิธี นี้ อาจ หลีก เลี่ยง ความ ผิด พลาด ธรรมดา 99% ได้.