Scarnox · Blog

Solving invisible PopularCaptcha: ต่างกันอย่างไรและต้องส่งอะไร

Invisible PopularCaptcha ดูเหมือนไม่มี captcha เลย ไม่มีกล่อง "I am human" เว็บไซต์เรียก PopularCaptcha จาก JavaScript ของตัวเอง มักเกิดขึ้นตอนที่ผู้เข้าชมกดส่งฟอร์ม และแสดงความท้าทายก็ต่อเมื่อไม่แน่ใจเกี่ยวกับผู้เข้าชม สำหรับสคริปต์ automation widget นี้หาได้ยากกว่า แต่การ solve ก็ยังเป็น request เดียว

Scarnox solve PopularCaptcha ได้ในปัจจุบัน รวมถึงรูปแบบ invisible คุณตั้งค่า flag เดียวคือ is_invisible แล้วส่ง request เดียวกับที่คุณจะส่งสำหรับ widget ที่มองเห็นได้ captcha ประเภทอื่นกำลังจะมาเร็ว ๆ นี้

วิธีสังเกตว่าเป็น invisible

การตั้งค่าบน sitekey เป็นตัวตัดสิน ไม่ใช่หน้าตาของหน้าเว็บ ถ้าไม่แน่ใจ ให้ หา sitekey และตรวจตัวเลือกของ widget ในโค้ด JavaScript ของหน้า

สิ่งที่ต้องส่ง

ใช้ endpoint เดิมและประเภท task เดิม และเพิ่ม is_invisible ที่ตั้งเป็น true:

{
  "captcha_type": "PopularCaptchaTaskProxyless",
  "site_key": "10000000-ffff-ffff-ffff-000000000001",
  "site_url": "https://example.com/login",
  "is_invisible": true
}

ส่งพร้อมกับ API key ของคุณในหัว Authorization: Bearer เหมือนตัวอย่างอื่นทั้งหมด การเรียกจะรอจนกว่า token พร้อม ไม่ต้อง polling ตั้ง timeout ประมาณ 185 วินาที

ส่ง token กลับไป

การเชื่อมต่อแบบ invisible เกือบทุกกรณีใช้ callback แทนฟิลด์ฟอร์ม เว็บไซต์ส่งชื่อฟังก์ชันให้ widget ผ่าน attribute data-callback หรือผ่านตัวเลือกใน render() ให้เรียกฟังก์ชันนั้นพร้อม token แล้วโค้ดของเว็บไซต์จะทำงานต่อราวกับว่าผู้เข้าชมผ่านความท้าทายแล้ว

await page.evaluate((t) => {
  document.querySelectorAll('[name="h-captcha-response"]').forEach((el) => { el.value = t; });
  const cb = document.querySelector("[data-sitekey]")?.dataset.callback;
  if (cb && typeof window[cb] === "function") window[cb](t);
}, token);

การตั้งค่าฟิลด์ที่ซ่อนไว้ด้วยไม่เป็นอันตราย และครอบคลุมเว็บไซต์ที่อ่านฟิลด์นั้นตอนส่งฟอร์ม

เวลาสำคัญกว่าปกติ

ใน widget แบบ invisible เว็บไซต์เป็นผู้กำหนดเวลาที่ความท้าทายทำงาน ซึ่งมักเป็นจังหวะที่ผู้เข้าชมกดส่ง ดังนั้นให้ solve ในจังหวะนั้น ไม่ใช่ก่อนหน้า รูปแบบที่ง่ายที่สุดคือเริ่ม solve ก่อนที่สคริปต์จะกดปุ่ม จากนั้นเรียก callback แล้วส่งฟอร์ม

token หมดอายุภายในประมาณสองนาที token ที่ดึงระหว่างโหลดหน้าและนำไปใช้หนึ่งนาทีต่อมามีแนวโน้มจะถูกปฏิเสธ

ความผิดพลาดที่พบบ่อย

การส่ง invisible sitekey เป็น task แบบ visible ปกติอาจได้ token ที่เว็บไซต์ปฏิเสธ หาก API ส่ง token กลับมาแต่เว็บไซต์ปฏิเสธ ให้ตรวจตามลำดับนี้:

  1. is_invisible ตั้งเป็น true แล้วหรือยัง
  2. เว็บไซต์เรียก callback หรือไม่ และทำก่อนที่ฟอร์มจะส่งหรือไม่
  3. site_url เป็นหน้าที่ invisible widget ทำงานอยู่หรือไม่
  4. ถ้าเว็บไซต์ยังปฏิเสธ token ปัญหาอาจผูกกับ IP ที่ใช้ solve ให้เปรียบเทียบกับ การ solve แบบมี proxy กับ proxyless

ทดสอบ flow แบบ invisible อย่างปลอดภัย

widget แบบ invisible ทดสอบด้วยมือได้ยาก เพราะความท้าทายทำงานเฉพาะตอนส่งและส่วนใหญ่ผ่านไปโดยไม่แสดงอะไร ให้ทดสอบตามลำดับนี้:

  1. ยืนยันว่าการ solve คืน token เมื่อ is_invisible เป็น true โดยใช้ smoke test จากคู่มือเครดิตทดลองใช้ฟรี
  2. เรียก callback ของเว็บไซต์ด้วยตัวเองใน console ของเบราว์เซอร์พร้อม token นั้น แล้วดูว่าฟอร์มดำเนินต่อหรือไม่
  3. ส่งฟอร์มจากสคริปต์ของคุณ แล้วตรวจหน้าที่ตามมา
  4. ทำซ้ำจากเครือข่ายที่สอง หากทำได้ เพื่อยืนยันว่า token ไม่ได้ผูกกับ IP ที่ใช้ solve

ทดสอบบนฟอร์มที่คุณเป็นเจ้าของ หรือสำเนา staging ของเว็บไซต์ที่คุณได้รับอนุญาตให้ทดสอบ อย่ารัน flow แบบ invisible กับบัญชีจริงที่คุณไม่ได้ควบคุม

ลำดับเหตุการณ์ในการส่งแบบ invisible หนึ่งครั้ง

การเชื่อมต่อที่ทำงานได้ดำเนินตามลำดับนี้:

  1. ผู้เข้าชม หรือสคริปต์ของคุณ กรอกฟอร์ม
  2. สคริปต์อ่าน sitekey และ URL ของหน้าจากหน้าเว็บ
  3. สคริปต์เรียก solve endpoint พร้อม is_invisible เป็น true แล้วรอ token
  4. สคริปต์เขียน token ลงในฟิลด์ตอบกลับ แล้วเรียก callback ของเว็บไซต์
  5. โค้ดของเว็บไซต์ส่งฟอร์มพร้อม token

ถ้าขั้นตอนที่ 3 เกิดขึ้นเร็วกว่าขั้นตอนที่ 5 มาก token อาจหมดอายุก่อนที่ฟอร์มจะถูกส่ง ให้ช่วงเวลาระหว่างสองขั้นตอนสั้นที่สุดเท่าที่ทำได้

เมื่อเว็บไซต์ปฏิเสธ invisible token

การถูกปฏิเสธไม่ได้หมายความเสมอว่า token มีปัญหา ตรวจสิ่งเหล่านี้ก่อนเปลี่ยน request ของการ solve:

หลังจากตรวจเหล่านี้แล้วค่อยมาดูเรื่อง proxy การถูกปฏิเสธส่วนใหญ่มาจาก callback หรือ session ไม่ใช่จาก IP

ขั้นตอนถัดไป

เริ่มต้นด้วยเครดิตทดลองใช้ฟรี ไม่ต้องใช้บัตรเครดิต: สร้างบัญชี แล้วทดสอบ invisible sitekey บนหน้าที่คุณเป็นเจ้าของ