AI Hunter
Member
Web Scraping "Bất tử": Dùng AI Vision (GPT-4o) để tự động sửa lỗi Selector và vượt Captcha
Bạn viết một con bot cào giá Shopee/Amazon. Chạy mượt mà được 2 ngày.
Ngày thứ 3, Shopee cập nhật giao diện. Class `.product-price` đổi thành `.price-tag-v2`. Bot chết. Bạn phải hì hục sửa code.
Đó là quy trình "Hard-code" cũ kỹ.
Chào mừng đến với kỷ nguyên **Self-Healing Scraping** (Cào web tự chữa lành). Bằng cách kết hợp Selenium với AI Vision (như GPT-4o hay Gemini Pro Vision), con bot của bạn sẽ có "đôi mắt". Dù code HTML có đổi nát bươm, miễn là trên màn hình vẫn còn nút đó, bot vẫn tìm ra được.
1. Chụp ảnh khung Captcha.
2. Gửi cho GPT-4o với prompt: "Hãy liệt kê tọa độ của tất cả các ô chứa đèn giao thông".
3. Dùng Selenium click vào các tọa độ AI trả về.
* **Giải pháp Free:** Bạn có thể thay thế GPT-4o bằng model **Llava** (Open Source) chạy local nếu máy có GPU khỏe, hoặc dùng model rẻ hơn như **GPT-4o-mini**.
Bạn viết một con bot cào giá Shopee/Amazon. Chạy mượt mà được 2 ngày.
Ngày thứ 3, Shopee cập nhật giao diện. Class `.product-price` đổi thành `.price-tag-v2`. Bot chết. Bạn phải hì hục sửa code.
Đó là quy trình "Hard-code" cũ kỹ.
Chào mừng đến với kỷ nguyên **Self-Healing Scraping** (Cào web tự chữa lành). Bằng cách kết hợp Selenium với AI Vision (như GPT-4o hay Gemini Pro Vision), con bot của bạn sẽ có "đôi mắt". Dù code HTML có đổi nát bươm, miễn là trên màn hình vẫn còn nút đó, bot vẫn tìm ra được.
1. Cơ chế hoạt động
Chúng ta không bỏ CSS Selector (vì nó nhanh/rẻ). Chúng ta dùng AI làm phương án dự phòng (Backup).- Bước 1: Thử tìm bằng Selector cũ (nhanh).
- Bước 2: Nếu lỗi (Element not found) -> Chụp màn hình gửi cho AI.
- Bước 3: Hỏi AI: "Nút 'Add to Cart' đang nằm ở tọa độ nào?"
- Bước 4: AI trả về tọa độ. Bot click vào đó và (tùy chọn) tự cập nhật lại Selector mới.
2. Chuẩn bị môi trường
Chúng ta cần Selenium để điều khiển trình duyệt và thư viện OpenAI để xử lý hình ảnh.
Bash:
pip install selenium openai pillow
3. Triển khai Code (Python)
Tạo fileimmortal_scraper.py.Bước 1: Cấu hình AI Vision
Hàm này nhận vào ảnh chụp màn hình (base64) và mô tả nút cần tìm.
Python:
import base64
from openai import OpenAI
import json
client = OpenAI(api_key="sk-...") # Điền Key của bạn
def ask_ai_coordinates(screenshot_path, element_description):
"""
Gửi ảnh cho AI và hỏi tọa độ của phần tử.
Trả về: {"x": 500, "y": 300}
"""
# Mã hóa ảnh sang Base64
with open(screenshot_path, "rb") as image_file:
base64_image = base64.b64encode(image_file.read()).decode('utf-8')
prompt = f"""
Hãy nhìn vào ảnh chụp màn hình trang web này.
Tìm vị trí tâm (center coordinates) của phần tử: '{element_description}'.
Trả về định dạng JSON thuần túy: {{"x": <pixel>, "y": <pixel>}}.
Không giải thích gì thêm.
"""
response = client.chat.completions.create(
model="gpt-4o", # Model Vision mạnh nhất hiện tại
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": prompt},
{
"type": "image_url",
"image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}
},
],
}
],
max_tokens=300,
)
content = response.choices[0].message.content
# Clean chuỗi JSON (đôi khi AI thêm markdown ```json)
content = content.replace("```json", "").replace("```", "").strip()
return json.loads(content)
Bước 2: Bot "Bất tử" với Selenium
Chúng ta viết một hàm `safe_click` thông minh.
Python:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome()
driver.maximize_window() # Mở to để tọa độ chuẩn
def safe_click(selector, description):
try:
# Cách 1: Thử click bình thường (Cách cũ)
print(f"🕵️ Đang tìm theo selector: {selector}...")
element = driver.find_element(By.CSS_SELECTOR, selector)
element.click()
print("✅ Click thành công bằng Selector!")
except Exception as e:
# Cách 2: Kích hoạt chế độ AI Vision (Khi cách 1 thất bại)
print(f"⚠️ Selector hỏng! Kích hoạt AI Vision để tìm '{description}'...")
# Chụp màn hình
screenshot_path = "debug_screen.png"
driver.save_screenshot(screenshot_path)
# Hỏi AI tọa độ
coords = ask_ai_coordinates(screenshot_path, description)
x, y = coords['x'], coords['y']
print(f"🤖 AI tìm thấy tại: ({x}, {y})")
# Click theo tọa độ
actions = ActionChains(driver)
actions.move_by_offset(x, y).click().perform()
# Reset chuột về 0,0 để tránh lỗi cho lần sau
actions.move_by_offset(-x, -y).perform()
print("✅ Click thành công bằng AI Vision!")
# --- CHẠY THỬ ---
# Giả sử vào trang Demo Login
driver.get("[https://the-internet.herokuapp.com/login](https://the-internet.herokuapp.com/login)")
time.sleep(2)
# Thử click với Selector SAI (để test tính năng cứu hộ của AI)
# Thực tế nút Login có ID là #login -> ta cố tình điền sai thành #nut-nay-khong-ton-tai
safe_click("#nut-nay-khong-ton-tai", "The red Login button")
time.sleep(5)
driver.quit()
4. Ứng dụng vượt Captcha
Với các loại Captcha hình ảnh (như chọn đèn giao thông, vạch kẻ đường), logic tương tự:1. Chụp ảnh khung Captcha.
2. Gửi cho GPT-4o với prompt: "Hãy liệt kê tọa độ của tất cả các ô chứa đèn giao thông".
3. Dùng Selenium click vào các tọa độ AI trả về.
5. Lưu ý về Chi phí & Tốc độ
* **Chi phí:** GPT-4o tính phí theo token. Mỗi lần "cứu hộ" tốn khoảng $0.01 - $0.03. Vì vậy, chỉ dùng AI khi Selector chính bị lỗi (Fallback mechanism), đừng dùng cho mọi thao tác click.* **Giải pháp Free:** Bạn có thể thay thế GPT-4o bằng model **Llava** (Open Source) chạy local nếu máy có GPU khỏe, hoặc dùng model rẻ hơn như **GPT-4o-mini**.