← กลับไปที่รายการ

เพลย์ไรท์ ทดสอบคอมมอนคอมพลิเค็ต: ข้อความผิดพลาด 3 ข้อนี้ ง่ายที่จะล้ม

itadol5j

เพลย์ไรท์ ทดสอบคอมมอนคอมพลิเค็ต: ข้อความผิดพลาด 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();
}

สรุป

แกนเพลย์ไรท์คือเดี๋ยวก่อนถึงการจัดการวงจรชีวิตฉันไม่รู้ จําจุดสามจุดนี้

  1. รอจนกว่าธาตุจะถูกโหลด
  2. เนื้อหาแบบไม่ตายตัวต้องถูกมองเห็น
  3. จดจําการปิดเบราว์เซอร์และบริบท

วิธี นี้ อาจ หลีก เลี่ยง ความ ผิด พลาด ธรรมดา 99% ได้.