สรุปสั้นๆ
Scrapling มีความสามารถในการหลีกเลี่ยงการป้องกันบอทได้อย่างมีประสิทธิภาพผ่านโหมด StealthyFetcher และ DynamicFetcher ใช้ StealthyFetcher สำหรับเว็บไซต์ที่ได้รับการป้องกันโดย Cloudflare (การแก้ Turnstile อัตโนมัติ, การสุ่มการพิมพ์ลายนิ้วมือ Canvas, การบล็อก WebRTC) หรือ DynamicFetcher สำหรับการใช้งานระบบป้องกันบอทที่ใช้ JavaScript เป็นหลัก ผสานรวมกับ OpenClaw เพื่อควบคุมการดำเนินการเก็บข้อมูลทั้งหมดผ่านคำสั่งภาษาธรรมชาติ
บทนำ
คุณเข้าชมเว็บไซต์เพื่อรวบรวมข้อมูล หน้าเว็บโหลดขึ้นมา จากนั้นคุณก็พบกับข้อความ: "Access Denied" (การเข้าถึงถูกปฏิเสธ) หรือการท้าทาย CAPTCHA เว็บไซต์ตรวจจับสคริปต์เก็บข้อมูลของคุณได้และบล็อกการเข้าถึง สถานการณ์เช่นนี้เกิดขึ้นอย่างต่อเนื่องสำหรับนักพัฒนา, นักวิทยาศาสตร์ข้อมูล และนักวิจัยที่ต้องการข้อมูลเว็บสำหรับโครงการที่ถูกต้องตามกฎหมาย
สิ่งนี้เกิดขึ้นเนื่องจากเว็บไซต์ต่าง ๆ นำระบบป้องกันบอทที่ซับซ้อนมาใช้มากขึ้นเรื่อย ๆ Cloudflare, PerimeterX, Akamai และบริการที่คล้ายกันจะวิเคราะห์ลายนิ้วมือของเบราว์เซอร์, รูปแบบพฤติกรรม และคุณลักษณะของคำขอ เพื่อระบุการเข้าถึงแบบอัตโนมัติ สคริปต์เก็บข้อมูลแบบดั้งเดิมจะล้มเหลวทันทีเมื่อเจอกับการป้องกันเหล่านี้ อุตสาหกรรมการตรวจจับบอทได้เติบโตขึ้นเป็นตลาดมูลค่าหลายพันล้านดอลลาร์ บริษัทต่าง ๆ ลงทุนอย่างมากในการปกป้องสินทรัพย์ดิจิทัลของตนจากการเข้าถึงแบบอัตโนมัติ Cloudflare รายงานว่ามีการบล็อกคำขอบอทหลายพันล้านรายการต่อวัน สิ่งนี้สร้างความท้าทายอย่างมากสำหรับการรวบรวมข้อมูลที่ถูกต้องตามกฎหมาย ไม่ว่าจะเป็นการวิจัยตลาด, การวิเคราะห์คู่แข่ง, การติดตามราคา หรือการวิจัยเชิงวิชาการ
Scrapling แก้ปัญหานี้ได้ ไลบรารีนี้มีโหมดป้องกันการตรวจจับหลายโหมดที่ออกแบบมาโดยเฉพาะเพื่อหลีกเลี่ยงการป้องกันเหล่านี้ เมื่อรวมกับอินเทอร์เฟซภาษาธรรมชาติของ OpenClaw คุณสามารถสั่งให้ผู้ช่วย AI ของคุณหลีกเลี่ยงการตรวจสอบบอทได้โดยไม่ต้องเขียนโค้ดที่ซับซ้อน
ทำความเข้าใจกับการตรวจจับบอท
ก่อนที่จะหลีกเลี่ยงการตรวจจับ คุณต้องเข้าใจว่ามันทำงานอย่างไร ระบบป้องกันบอทจะวิเคราะห์ปัจจัยหลายประการ:
การพิมพ์ลายนิ้วมือของเบราว์เซอร์: เว็บไซต์จะรวบรวมข้อมูลเกี่ยวกับเบราว์เซอร์ของคุณ รวมถึงความละเอียดหน้าจอ, ฟอนต์ที่ติดตั้ง, WebGL renderer, เอาต์พุตของ Canvas และสัญญาณอื่น ๆ อีกหลายร้อยรายการ เครื่องมืออัตโนมัติมักจะเผยตัวเองผ่านลายนิ้วมือที่สอดคล้องกันซึ่งแตกต่างจากเบราว์เซอร์จริง
การวิเคราะห์พฤติกรรม: ผู้ใช้งานที่เป็นมนุษย์จะเคลื่อนเมาส์อย่างไม่สามารถคาดเดาได้, เลื่อนหน้าจอด้วยความเร็วที่แตกต่างกัน และพิมพ์ด้วยจังหวะที่เป็นธรรมชาติ บอทมักจะแสดงรูปแบบเชิงกล: โหลดหน้าเว็บทันที, ความเร็วในการเลื่อนหน้าจอที่สม่ำเสมอ, จังหวะที่แม่นยำระหว่างการกระทำ
การวิเคราะห์คำขอ: คำขอ HTTP แต่ละรายการจะประกอบด้วยส่วนหัว (headers), ลายนิ้วมือ TLS และรูปแบบการเชื่อมต่อ ไลบรารี HTTP มาตรฐาน เช่น requests จะสร้างคำขอที่ดูเป็นอัตโนมัติอย่างชัดเจนเมื่อเทียบกับการรับส่งข้อมูลของเบราว์เซอร์จริง
การท้าทายด้วย JavaScript: เว็บไซต์สมัยใหม่รัน JavaScript เพื่อรวบรวมข้อมูลเบราว์เซอร์ ตัวอย่างเช่น Turnstile ของ Cloudflare จะรันการทดสอบที่มองไม่เห็นเพื่อยืนยันความสมบูรณ์ของเบราว์เซอร์ก่อนที่จะแสดงเนื้อหา
ชื่อเสียงของ IP: ที่อยู่ IP จะถูกทำเครื่องหมายตามผู้ให้บริการโฮสติ้ง, ประวัติกิจกรรมที่น่าสงสัย และตำแหน่งทางภูมิศาสตร์ IP ของศูนย์ข้อมูลจะกระตุ้นให้เกิดความสงสัยทันที
Scrapling จัดการกับแต่ละเวกเตอร์การตรวจจับเหล่านี้ผ่าน fetcher เฉพาะของมัน
ความสามารถในการป้องกันบอทของ Scrapling
Scrapling มี fetcher หลักสองตัวสำหรับหลีกเลี่ยงระบบป้องกันบอท:

StealthyFetcher จัดการกับการป้องกันส่วนใหญ่ของ Cloudflare และระบบที่คล้ายกัน มันใช้ headless Chrome พร้อมเทคนิคการหลีกเลี่ยงในตัวที่แก้ไขเวกเตอร์การตรวจจับทั่วไปโดยอัตโนมัติ
DynamicFetcher ให้การทำงานอัตโนมัติของเบราว์เซอร์เต็มรูปแบบผ่าน Playwright ใช้เมื่อ StealthyFetcher ล้มเหลว หรือเมื่อเว็บไซต์ใช้การตรวจจับขั้นสูงที่ใช้ JavaScript
นี่คือวิธีการเลือก:
| สถานการณ์ | Fetcher ที่แนะนำ |
|---|---|
| การป้องกันโดย Cloudflare | StealthyFetcher |
| Turnstile CAPTCHA | StealthyFetcher |
| การตรวจจับบอทพื้นฐาน | StealthyFetcher |
| การท้าทายด้วย JavaScript ที่ซับซ้อน | DynamicFetcher |
| การเลื่อนไม่สิ้นสุดพร้อมการป้องกันบอท | DynamicFetcher |
| โซลูชันป้องกันบอทที่กำหนดเอง | DynamicFetcher |
เจาะลึก StealthyFetcher
StealthyFetcher เป็นเครื่องมือหลักของ Scrapling ในการหลีกเลี่ยงระบบป้องกันบอท มันจัดการกับกลไกการป้องกันทั่วไปส่วนใหญ่โดยอัตโนมัติ
การใช้งานพื้นฐาน
from scrapling.fetchers import StealthyFetcher
fetcher = StealthyFetcher()
page = fetcher.get('https://protected-site.com')
print(page.text)
fetcher พยายามหลีกเลี่ยง Cloudflare, PerimeterX และการป้องกันที่คล้ายกันโดยอัตโนมัติ
การหลีกเลี่ยง Cloudflare Turnstile
Cloudflare Turnstile เป็นหนึ่งในการท้าทายป้องกันบอทที่พบบ่อยที่สุด StealthyFetcher จะแก้ปัญหานี้โดยอัตโนมัติ:
page = StealthyFetcher.fetch(
'https://cloudflare-protected-site.com',
solve_cloudflare=True
)
พารามิเตอร์ solve_cloudflare=True จะเรียกใช้งานการแก้ปัญหาการท้าทายโดยอัตโนมัติ ซึ่งใช้ได้กับการท้าทายแบบคั่นหน้า (หน้า "Checking your browser before accessing") และวิดเจ็ต Turnstile
การสุ่มลายนิ้วมือ Canvas
การพิมพ์ลายนิ้วมือ Canvas สร้างตัวระบุที่ไม่ซ้ำกันโดยอิงจากวิธีการที่เบราว์เซอร์ของคุณแสดงผลกราฟิก StealthyFetcher จะเพิ่มสัญญาณรบกวนแบบสุ่มในการดำเนินการ Canvas:
page = StealthyFetcher.fetch(
'https://site.com',
hide_canvas=True
)
แต่ละคำขอจะสร้างเอาต์พุต Canvas ที่แตกต่างกัน ทำให้การติดตามลายนิ้วมือไม่มีประสิทธิภาพ
การป้องกัน WebRTC Leak
WebRTC สามารถเปิดเผยที่อยู่ IP จริงของคุณได้ แม้ในขณะที่ใช้พร็อกซี StealthyFetcher จะบล็อกคำขอ WebRTC:
page = StealthyFetcher.fetch(
'https://site.com',
block_webrtc=True
)
สิ่งนี้ช่วยป้องกันการรั่วไหลของ IP ภายในที่อาจเปิดเผยตัวตนหรือตำแหน่งของคุณ
การปลอมแปลง Referer จาก Google Search
หลายเว็บไซต์อนุญาตการเข้าถึงเมื่อคิดว่าการเข้าชมมาจาก Google Search StealthyFetcher จะปลอมแปลง referer นี้:
page = StealthyFetcher.fetch(
'https://site.com',
google_search=True
)
สิ่งนี้ทำให้คำขอปรากฏว่ามาจากหน้าผลการค้นหาของ Google
การใช้ Chrome ที่ติดตั้งไว้
เพื่อการหลีกเลี่ยงสูงสุด ให้ใช้เบราว์เซอร์ Chrome ที่ติดตั้งไว้แทน Chromium ของ Playwright:
page = StealthyFetcher.fetch(
'https://site.com',
real_chrome=True
)
สิ่งนี้ใช้การติดตั้ง Chrome จริงของคุณ ซึ่งมีลายนิ้วมือเบราว์เซอร์ที่ถูกต้องตามกฎหมาย
การปลอมแปลงตำแหน่งทางภูมิศาสตร์
จับคู่คำขอของคุณกับตำแหน่งที่ตั้งเฉพาะ:
page = StealthyFetcher.fetch(
'https://site.com',
locale='en-US',
timezone_id='America/New_York'
)
สิ่งนี้จะตั้งค่าเขตเวลาและภาษาของเบราว์เซอร์ให้ตรงกับตำแหน่งที่คุณต้องการ
DynamicFetcher สำหรับการป้องกันขั้นสูง
บางเว็บไซต์ใช้ระบบป้องกันบอทที่ซับซ้อนซึ่ง StealthyFetcher ไม่สามารถหลีกเลี่ยงได้ DynamicFetcher ให้การทำงานอัตโนมัติของเบราว์เซอร์เต็มรูปแบบด้วย Playwright:
from scrapling.fetchers import DynamicFetcher
fetcher = DynamicFetcher()
page = fetcher.get('https://highly-protected-site.com')
print(page.text)
การจัดการกับการเลื่อนไม่สิ้นสุด
เว็บไซต์ที่มีการเลื่อนไม่สิ้นสุดและการป้องกันบอทจำเป็นต้องใช้ระบบอัตโนมัติของเบราว์เซอร์:
from scrapling.fetchers import DynamicFetcher
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
fetcher = DynamicFetcher(playwright=p)
page = fetcher.get('https://site.com/infinite-scroll')
# Wait for content to load
page.wait_for_selector('.content-item')
# Scroll to load more
for _ in range(5):
page.evaluate('window.scrollTo(0, document.body.scrollHeight)')
page.wait_for_timeout(1000)
การรอให้ JavaScript ทำงาน
เนื้อหาบางส่วนโหลดผ่าน JavaScript หลังจากการโหลดหน้าเว็บเริ่มต้น:
page = DynamicFetcher.get('https://site.com')
page.wait_for_load_state('networkidle')
content = page.content()
สิ่งนี้ทำให้แน่ใจว่า JavaScript ทั้งหมดได้ทำงานแล้วก่อนที่จะดึงเนื้อหา
การจัดการ CAPTCHA ด้วยตนเอง
สำหรับ CAPTCHA ที่ไม่สามารถแก้ได้โดยอัตโนมัติ:
page = DynamicFetcher.get('https://site.com')
# Check if CAPTCHA is present
if page.is_visible('.captcha-container'):
# Take screenshot for manual solving
page.screenshot(path='captcha.png')
# After manual solve, continue
page.click('.captcha-submit')
คุณสามารถหยุดชั่วคราวเพื่อดำเนินการด้วยตนเอง แก้ CAPTCHA ด้วยตัวคุณเอง แล้วดำเนินการเก็บข้อมูลต่อ
การใช้งานร่วมกับ OpenClaw
OpenClaw ช่วยให้คุณสามารถควบคุมความสามารถในการป้องกันบอทของ Scrapling ผ่านภาษาธรรมชาติ (หากคุณต้องการดูวิธีการตั้งค่า Scrapling ภายใน OpenClaw โปรด ดูโพสต์นี้):
หลีกเลี่ยง Cloudflare บนเว็บไซต์:
"Get the product data from https://shop.example.com, this site has Cloudflare protection"
OpenClaw ใช้ StealthyFetcher โดยอัตโนมัติพร้อมเปิดใช้งาน solve_cloudflare
จัดการเว็บไซต์ที่มีการป้องกันขั้นสูง:
"Scrape the job listings from https://careers.example.com, use headless browser mode because they have strong anti-bot protection"
OpenClaw จะเปลี่ยนไปใช้ DynamicFetcher เพื่อการทำงานอัตโนมัติของเบราว์เซอร์เต็มรูปแบบ
ใช้การหมุนเวียนพร็อกซี:
"Extract data from these 100 URLs, rotate through these proxies: proxy1.com:8080, proxy2.com:8080, proxy3.com:8080"
OpenClaw จะกระจายคำขอไปยังพร็อกซีหลายตัว
ปลอมแปลงตำแหน่งทางภูมิศาสตร์:
"Get the price data from https://site.com, use US East Coast settings"
OpenClaw กำหนดค่าเขตเวลาและภาษาให้ตรงกัน
เทคนิคป้องกันบอทที่อธิบาย
การทำความเข้าใจเทคนิคพื้นฐานช่วยให้คุณเลือกแนวทางที่ถูกต้องได้:
การปลอมแปลงลายนิ้วมือ TLS
เมื่อเบราว์เซอร์ของคุณเชื่อมต่อกับเว็บไซต์ มันจะทำการจับมือ TLS (TLS handshake) ข้อความ ClientHello ประกอบด้วยลักษณะเฉพาะที่ระบุไลบรารีไคลเอ็นต์ของคุณ คำขอ Python มาตรฐานมีลายนิ้วมือที่แตกต่างกันซึ่งระบบป้องกันบอทสามารถจดจำได้
Scrapling ปลอมแปลงลายนิ้วมือ TLS เพื่อให้ดูเหมือนเบราว์เซอร์ที่ถูกต้องตามกฎหมาย สิ่งนี้เกิดขึ้นโดยอัตโนมัติกับ StealthyFetcher และ DynamicFetcher
การหมุนเวียน User-Agent
การส่งคำขอด้วยสตริง User-Agent เดียวกันจะกระตุ้นการตรวจจับ Scrapling จะหมุนเวียน User-Agent โดยอัตโนมัติ:
# User-Agent is automatically rotated
page = StealthyFetcher.get('https://site.com')
แต่ละคำขอจะปรากฏว่ามาจากเบราว์เซอร์เวอร์ชันที่แตกต่างกัน
การปลอมแปลง Header
เบราว์เซอร์จริงจะส่งส่วนหัวที่เฉพาะเจาะจงตามลำดับที่เฉพาะเจาะจง Scrapling จะทำให้แน่ใจว่าส่วนหัวตรงกับพฤติกรรมเบราว์เซอร์ที่ถูกต้องตามกฎหมายโดยอัตโนมัติ
การสุ่ม Canvas
เมื่อเว็บไซต์ขอให้เบราว์เซอร์ของคุณวาดบางสิ่ง พิกเซลที่แม่นยำจะเปิดเผยเบราว์เซอร์และ GPU ของคุณ Scrapling จะเพิ่มสัญญาณรบกวนที่ตรวจไม่พบในการดำเนินการ Canvas ทำให้แต่ละลายนิ้วมือไม่ซ้ำกัน
ความละเอียดหน้าจอและขนาดหน้าต่าง
เบราว์เซอร์แบบ Headless มักจะรายงานขนาดหน้าจอเริ่มต้น Scrapling จะสุ่มขนาด viewport เพื่อให้ตรงกับจอแสดงผลของผู้ใช้จริง
การจำลองการเคลื่อนไหวของเมาส์
DynamicFetcher สามารถจำลองการเคลื่อนไหวของเมาส์ที่เหมือนมนุษย์ได้:
page.mouse.move_to_element('.button')
page.mouse.move_by_offset(50, 20)
page.click('.submit')
สิ่งนี้จะเพิ่มรูปแบบการเคลื่อนไหวที่สมจริงซึ่งผ่านการวิเคราะห์พฤติกรรม
การผสานรวมพร็อกซี
การใช้พร็อกซีช่วยหลีกเลี่ยงการบล็อกตาม IP และช่วยให้สามารถเก็บข้อมูลตามตำแหน่งทางภูมิศาสตร์ได้:
การใช้งานพร็อกซีพื้นฐาน
from scrapling.fetchers import StealthyFetcher
fetcher = StealthyFetcher()
page = fetcher.get(
'https://site.com',
proxy='http://username:password@proxy.example.com:8080'
)
การหมุนเวียนพร็อกซี
สำหรับการเก็บข้อมูลขนาดใหญ่ ให้หมุนเวียนใช้พร็อกซีหลายตัว:
import random
from scrapling.fetchers import StealthyFetcher
proxies = [
'http://proxy1.com:8080',
'http://proxy2.com:8080',
'http://proxy3.com:8080'
]
fetcher = StealthyFetcher()
for url in urls:
proxy = random.choice(proxies)
page = fetcher.get(url, proxy=proxy)
# Process page
พร็อกซีที่อยู่อาศัย (Residential Proxies)
พร็อกซีที่อยู่อาศัยใช้ที่อยู่ IP จากผู้ให้บริการอินเทอร์เน็ตจริง ตรวจจับได้ยากกว่า IP ของศูนย์ข้อมูล:
page = StealthyFetcher.get(
'https://site.com',
proxy='http://residential-proxy-provider:port'
)
พร็อกซีที่อยู่อาศัยมีราคาสูงกว่า แต่ให้ผลสำเร็จสูงกว่ามากในเว็บไซต์ที่ได้รับการป้องกัน
สถานการณ์ป้องกันบอทที่พบบ่อย
การป้องกันโดย Cloudflare
Cloudflare เป็นโซลูชันป้องกันบอทที่พบบ่อยที่สุด เว็บไซต์ส่วนใหญ่ใช้งานได้กับ StealthyFetcher พื้นฐาน:
page = StealthyFetcher.fetch('https://cloudflare-site.com', solve_cloudflare=True)
หาก Cloudflare แสดงหน้าการท้าทาย fetcher จะแก้ปัญหานั้นโดยอัตโนมัติและลองใหม่
PerimeterX (ปัจจุบันคือ Ownl)
PerimeterX (ปัจจุบันเป็นส่วนหนึ่งของ Ownl) ใช้การวิเคราะห์พฤติกรรม:
# Use DynamicFetcher for PerimeterX
page = DynamicFetcher.get('https://perimeterx-site.com')
การทำงานอัตโนมัติของเบราว์เซอร์เต็มรูปแบบจัดการกับการท้าทายด้านพฤติกรรมได้ดีกว่า
Akamai
Akamai ให้บริการการจัดการบอทระดับองค์กร:
# Akamai often requires residential proxies
page = StealthyFetcher.get(
'https://akamai-protected.com',
proxy='http://residential-proxy:port',
solve_cloudflare=True
)
เว็บไซต์ที่ป้องกันโดย Akamai มักจะต้องรวมเทคนิคการหลีกเลี่ยงหลายอย่างเข้าด้วยกัน
โซลูชันป้องกันบอทที่กำหนดเอง
บางเว็บไซต์สร้างระบบตรวจจับของตนเอง:
# Use maximum stealth settings
page = StealthyFetcher.fetch(
'https://custom-protected.com',
solve_cloudflare=True,
block_webrtc=True,
hide_canvas=True,
google_search=True,
real_chrome=True
)
หากสิ่งนี้ล้มเหลว ให้เปลี่ยนไปใช้ DynamicFetcher พร้อมการทำงานอัตโนมัติของเบราว์เซอร์เต็มรูปแบบ
แนวปฏิบัติที่ดีที่สุด
เริ่มต้นแบบง่าย ๆ
เริ่มต้นด้วย StealthyFetcher พื้นฐาน เพิ่มความซับซ้อนเฉพาะเมื่อคุณพบกับการบล็อก:
# Try basic first
page = StealthyFetcher.get('https://site.com')
# Add evasion if needed
if 'blocked' in page.text.lower():
page = StealthyFetcher.fetch('https://site.com', solve_cloudflare=True)
เคารพข้อจำกัดอัตราการร้องขอ (Rate Limits)
แม้จะมีขีดความสามารถในการป้องกันบอท การส่งคำขอมากเกินไปจะกระตุ้นการป้องกัน:
import time
for url in urls:
page = StealthyFetcher.get(url)
time.sleep(2) # Wait between requests
ใช้พร็อกซีที่อยู่อาศัยสำหรับการใช้งานจริง
พร็อกซีฟรีหรือราคาถูกมักจะมีชื่อเสียงไม่ดี ลงทุนในพร็อกซีที่อยู่อาศัยคุณภาพดีเพื่อการเก็บข้อมูลที่เชื่อถือได้:
# Quality residential proxy
page = StealthyFetcher.get(
'https://site.com',
proxy='http://premium-residential-proxy:port'
)
ตรวจสอบ robots.txt
ตรวจสอบเสมอว่าเว็บไซต์อนุญาตให้เก็บข้อมูลหรือไม่:
# Check robots.txt before scraping
from urllib.parse import urlparse
domain = urlparse('https://site.com').netloc
robots_url = f'https://{domain}/robots.txt'
จัดการข้อผิดพลาดอย่างเหมาะสม
สร้างการจัดการข้อผิดพลาดในสคริปต์เก็บข้อมูลของคุณ:
from scrapling.fetchers import StealthyFetcher
fetcher = StealthyFetcher()
try:
page = fetcher.get('https://site.com')
except Exception as e:
print(f'Error: {e}')
# Fall back to DynamicFetcher
from scrapling.fetchers import DynamicFetcher
fetcher = DynamicFetcher()
page = fetcher.get('https://site.com')
การแก้ไขปัญหา
ยังคงถูกบล็อก
หากคุณยังคงพบการบล็อกแม้จะใช้ StealthyFetcher แล้วก็ตาม:
- เปิดใช้งานตัวเลือกการหลีกเลี่ยงทั้งหมด:
page = StealthyFetcher.fetch(
'https://site.com',
solve_cloudflare=True,
block_webrtc=True,
hide_canvas=True,
google_search=True,
real_chrome=True
)
- เปลี่ยนไปใช้ DynamicFetcher:
from scrapling.fetchers import DynamicFetcher
page = DynamicFetcher.get('https://site.com')
- เพิ่มการหมุนเวียนพร็อกซี:
page = StealthyFetcher.get(
'https://site.com',
proxy='http://residential-proxy:port'
)
วงจรการท้าทายของ Cloudflare
บางครั้ง StealthyFetcher อาจติดอยู่ในวงจรการท้าทาย:
- เพิ่มระยะเวลาหมดเวลา (timeout):
page = StealthyFetcher.fetch(
'https://site.com',
solve_cloudflare=True,
timeout=120
)
- ใช้ real_chrome:
page = StealthyFetcher.fetch(
'https://site.com',
solve_cloudflare=True,
real_chrome=True
)
CAPTCHA ไม่สามารถแก้ไขได้
CAPTCHA บางประเภทต้องการการดำเนินการด้วยตนเอง:
page = DynamicFetcher.get('https://site.com')
if page.is_visible('[class*="captcha"]'):
page.screenshot(path='manual_captcha.png')
# Solve manually, then continue
input('Press Enter after solving CAPTCHA...')
page.click('.submit-button')
ประสิทธิภาพช้า
การหลีกเลี่ยงบอทเพิ่มภาระงาน เพื่อการเก็บข้อมูลที่เร็วขึ้น:
- ใช้ StealthyFetcher แทน DynamicFetcher เมื่อเป็นไปได้
- เพิ่มการเชื่อมต่อพูลลิ่ง (connection pooling)
- ใช้พร็อกซีที่เร็วขึ้น
- ลดตัวเลือกการหลีกเลี่ยงที่ไม่จำเป็น
บทสรุป
การหลีกเลี่ยงการตรวจสอบบอทจำเป็นต้องทำความเข้าใจว่าการตรวจจับทำงานอย่างไร และใช้เครื่องมือที่เหมาะสมสำหรับแต่ละสถานการณ์ Scrapling นำเสนอโซลูชันที่ครอบคลุมผ่าน StealthyFetcher สำหรับระบบป้องกันส่วนใหญ่ และ DynamicFetcher สำหรับสถานการณ์ขั้นสูง
ประเด็นสำคัญที่ควรจำ:
- ใช้ StealthyFetcher สำหรับ Cloudflare, Turnstile และการป้องกันบอทพื้นฐาน
- เปิดใช้งาน
solve_cloudflare=Trueเพื่อการแก้ปัญหาการท้าทายโดยอัตโนมัติ - เปลี่ยนไปใช้ DynamicFetcher เมื่อ StealthyFetcher ล้มเหลว
- เพิ่มการหมุนเวียนพร็อกซีสำหรับการเก็บข้อมูลขนาดใหญ่
- รวมเทคนิคการหลีกเลี่ยงหลายอย่างเข้าด้วยกันสำหรับเว็บไซต์ที่ดื้อรั้น
ด้วยการผสานรวม OpenClaw คุณสามารถควบคุมความสามารถทั้งหมดเหล่านี้ได้ด้วยภาษาธรรมชาติ บอกผู้ช่วย AI ของคุณว่าคุณต้องการอะไร แล้วมันจะเลือกวิธีการป้องกันบอทที่เหมาะสมโดยอัตโนมัติ เมื่อคุณรวบรวมข้อมูลเสร็จแล้ว คุณสามารถใช้ Apidog เพื่อทดสอบและตรวจสอบ API, สร้างชุดการทดสอบอัตโนมัติ และสร้างเอกสารสำหรับปลายทางที่คุณค้นพบ
คำถามที่พบบ่อย
ความแตกต่างระหว่าง StealthyFetcher และ DynamicFetcher คืออะไร?
StealthyFetcher ใช้ headless Chrome ที่ได้รับการดัดแปลงพร้อมแพตช์หลีกเลี่ยงในตัว DynamicFetcher ใช้ระบบอัตโนมัติเต็มรูปแบบของ Playwright StealthyFetcher เร็วกว่า แต่อาจล้มเหลวกับการตรวจจับขั้นสูง DynamicFetcher เชื่อถือได้มากกว่า แต่ทำงานช้ากว่า
Scrapling ใช้งานได้กับระบบป้องกันบอททุกระบบหรือไม่?
ไม่มีโซลูชันป้องกันบอทใดที่ทำงานได้ 100% ตลอดเวลา Scrapling จัดการกับระบบทั่วไปส่วนใหญ่ (Cloudflare, PerimeterX, Akamai) ได้อย่างน่าเชื่อถือ โซลูชันที่กำหนดเองหรือระดับองค์กรอาจต้องใช้เทคนิคเพิ่มเติมหรือการดำเนินการด้วยตนเอง
การหลีกเลี่ยงการป้องกันบอทถูกกฎหมายหรือไม่?
กฎหมายแตกต่างกันไปตามเขตอำนาจศาลและขึ้นอยู่กับข้อกำหนดในการให้บริการของเว็บไซต์ โดยทั่วไปแล้ว การเก็บข้อมูลสาธารณะเป็นสิ่งที่ยอมรับได้ การหลีกเลี่ยงการยืนยันตัวตนหรือการเข้าถึงข้อมูลส่วนตัวโดยไม่ได้รับอนุญาตถือเป็นการละเมิดขอบเขตทางกฎหมาย
เหตุใดการเก็บข้อมูลของฉันยังคงถูกบล็อก?
ตรวจสอบปัญหาที่พบบ่อยเหล่านี้: ชื่อเสียงของ IP (ใช้พร็อกซีที่อยู่อาศัย), การจำกัดอัตรา (เพิ่มความหน่วงเวลา), การหลีกเลี่ยงไม่เพียงพอ (เปิดใช้งานตัวเลือกเพิ่มเติม) หรือการท้าทายด้วย JavaScript (ใช้ DynamicFetcher)
ฉันจะจัดการ CAPTCHA ได้อย่างไร?
StealthyFetcher แก้ Cloudflare Turnstile โดยอัตโนมัติ สำหรับ CAPTCHA อื่น ๆ ให้ใช้ DynamicFetcher และหยุดชั่วคราวเพื่อแก้ไขด้วยตนเอง หรือผสานรวมบริการแก้ CAPTCHA ของบุคคลที่สาม
ฉันสามารถใช้เบราว์เซอร์ Chrome ของตัวเองได้หรือไม่?
ได้ คุณสามารถตั้งค่า real_chrome=True ใน StealthyFetcher เพื่อใช้ Chrome ที่ติดตั้งไว้แทน Chromium ของ Playwright ซึ่งจะให้ลายนิ้วมือเบราว์เซอร์ที่ถูกต้องตามกฎหมายมากขึ้น
ฉันจำเป็นต้องใช้พร็อกซีหรือไม่?
สำหรับการเก็บข้อมูลขนาดเล็ก ไม่จำเป็น สำหรับการใช้งานจริงหรือการดำเนินการขนาดใหญ่ พร็อกซีที่อยู่อาศัยจะช่วยเพิ่มอัตราความสำเร็จได้อย่างมากโดยการหลีกเลี่ยงการบล็อกตาม IP
ฉันจะหมุนเวียน User-Agent ได้อย่างไร?
StealthyFetcher จะหมุนเวียน User-Agent โดยอัตโนมัติ สำหรับการควบคุมด้วยตนเอง:
fetcher = StealthyFetcher(headers={'User-Agent': 'Your-Custom-UA'})
อัตราความสำเร็จในการต่อต้าน Cloudflare คือเท่าใด?
ด้วยการกำหนดค่าที่เหมาะสม อัตราความสำเร็จเกิน 90% สำหรับเว็บไซต์ส่วนใหญ่ที่ได้รับการป้องกันโดย Cloudflare การท้าทาย Turnstile จะได้รับการแก้ไขโดยอัตโนมัติ
ฉันสามารถเก็บข้อมูลจากหลายตำแหน่งทางภูมิศาสตร์ได้หรือไม่?
ได้ ใช้พารามิเตอร์ timezone_id และ locale:
page = StealthyFetcher.fetch(
'https://site.com',
timezone_id='Europe/London',
locale='en-GB'
)
