
Anh Tuan
Data Science Expert

Selenium là một công cụ kiểm thử tự động mã nguồn mở, chủ yếu được sử dụng để tự động hóa các ứng dụng web. Nó cũng thường được sử dụng để thu thập dữ liệu web và tự động hóa các tương tác trên trang web. Selenium có thể mô phỏng nhiều hành vi của người dùng trong trình duyệt, chẳng hạn như nhấp chuột, nhập liệu, cuộn trang và chuyển trang. Nó được phát triển ban đầu bởi Jason Huggins vào năm 2004 và hiện đang được duy trì bởi nhóm dự án Selenium. Selenium hỗ trợ nhiều ngôn ngữ lập trình, bao gồm Python, Java, C#, Ruby và JavaScript.
Selenium bao gồm các thành phần cốt lõi sau:
Selenium WebDriver (thường được sử dụng nhất)
chromedriver hoặc geckodriver.Selenium IDE
Selenium Grid
Để sử dụng Selenium trong Python:
pip install selenium
Để sử dụng Selenium với Chrome, hãy tải xuống chromedriver phù hợp với phiên bản Chrome của bạn từ Github
Ví dụ: Sử dụng Selenium để lấy tất cả tiêu đề bài đăng blog từ blog của CapSolver:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
chrome_options = Options()
chrome_options.add_argument("--start-maximized")
# Chỉ định đường dẫn chromedriver (nếu đã được thêm vào PATH, có thể bỏ qua)
service = Service(executable_path="chromedriver.exe")
driver = webdriver.Chrome(options=chrome_options, service=service)
try:
driver.get("https://www.capsolver.com/blog/All")
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, 'h5')))
h5_elements = driver.find_elements(By.TAG_NAME, "h5")
for el in h5_elements:
print(el.text.strip())
finally:
driver.quit()
Selenium là một công cụ mạnh mẽ hỗ trợ tải các tiện ích mở rộng trình duyệt giống như một trình duyệt thông thường.
Tải xuống gói .zip tiện ích mở rộng mới nhất từ GitHub chính thức của CapSolver và giải nén:
👉 https://github.com/capsolver/capsolver-browser-extension/releases
Trong các tùy chọn khởi động của Selenium, sử dụng đối số load-extension để chỉ định đường dẫn tiện ích mở rộng:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
chrome_options = Options()
chrome_options.add_argument("--start-maximized")
chrome_options.add_argument("load-extension=/path/to/capSolver extension")
# Chỉ định đường dẫn chromedriver (bỏ qua nếu đã có trong PATH)
service = Service(executable_path="chromedriver.exe")
driver = webdriver.Chrome(options=chrome_options, service=service)
try:
driver.get("https://www.capsolver.com/blog/All")
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, 'h5')))
h5_elements = driver.find_elements(By.TAG_NAME, "h5")
for el in h5_elements:
print(el.text.strip())
finally:
driver.quit()
⚠️ Lưu ý: Nếu bạn đang sử dụng Chrome v137, bạn có thể cần thêm một đối số bổ sung:
chrome_options.add_argument("--disable-features=DisableLoadExtensionCommandLineSwitch")
Chi tiết hơn: SeleniumHQ. Các phiên bản khác nhau có thể hoạt động khác nhau—hãy điều chỉnh theo môi trường của bạn.
CAPTCHAs như reCAPTCHA, Cloudflare Turnstile, AWS WAF và GeeTest được sử dụng rộng rãi trên hàng nghìn trang web. Tuy nhiên, cấu trúc DOM của chúng vẫn chủ yếu nhất quán trên các trang web. Tiện ích mở rộng CapSolver có thể tự động phát hiện và giải quyết các CAPTCHA này dựa trên các đặc điểm riêng biệt của chúng—không cần tương tác thủ công.
Hãy lấy reCAPTCHA v2 làm ví dụ và chứng minh cách sử dụng tiện ích mở rộng CapSolver trong Selenium để bỏ qua nó.
(Lưu ý: trừ khi được chỉ định khác, bản demo sau đây sử dụng chế độ click: được đặt trong /assets/config.js → reCaptchaMode: 'click')
🛠️ Đừng quên giải nén tiện ích mở rộng và cấu hình
apiKeycủa bạn trong/assets/config.js
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
chrome_options = Options()
chrome_options.add_argument("--start-maximized")
# Bước 1: Lấy tiện ích mở rộng từ GitHub: https://github.com/capsolver/capsolver-browser-extension/releases
# Bước 2: Giải nén tiện ích mở rộng và đặt apiKey của bạn trong /assets/config.js
chrome_options.add_argument("load-extension=/path/to/CapSolver Browser Extension-v1.16.0")
# Chỉ định đường dẫn chromedriver (bỏ qua nếu đã có trong PATH)
service = Service(executable_path="chromedriver.exe")
driver = webdriver.Chrome(options=chrome_options, service=service)
try:
driver.get("https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php")
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'form[action="/recaptcha-v2-checkbox.php"]')))
# Tiện ích mở rộng sẽ tự động phát hiện và giải quyết reCAPTCHA
time.sleep(15)
# Sau khi giải quyết, nhấp vào nút gửi
submit_button = driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]')
submit_button.click()
time.sleep(3)
except Exception as error:
print(error)
finally:
driver.quit()
Tiện ích mở rộng CapSolver cũng hỗ trợ nhiều tùy chọn cấu hình hữu ích. Tất cả các cài đặt có thể được điều chỉnh trong tệp
/assets/config.js.
solvedCallbackTrong ví dụ trước, chúng ta đã chờ 15 giây sau khi tải trang trước khi nhấp vào nút gửi. Khoảng thời gian chờ này nhằm mục đích cung cấp cho tiện ích mở rộng CapSolver đủ thời gian để tự động giải quyết reCAPTCHA.
Tuy nhiên, cách tiếp cận này không tinh tế. Trong thực tế, việc giải quyết CAPTCHA có thể mất ít hơn 15 giây, hoặc trong trường hợp mạng chậm, hơn 15 giây.
Để giải quyết vấn đề này, CapSolver cung cấp một tùy chọn cấu hình gọi là solvedCallback. Điều này cho phép bạn định nghĩa một hàm callback được kích hoạt sau khi CAPTCHA được giải quyết thành công. Bạn có thể tìm thấy tùy chọn solvedCallback trong /assets/config.js, và bạn có thể tùy chỉnh tên hàm—theo mặc định, đó là captchaSolvedCallback.
Nếu bạn đang sử dụng Puppeteer hoặc Playwright, bạn có thể hiển thị hàm callback này cho ngữ cảnh trình duyệt bằng phương pháp page.exposeFunction. Xem:
Còn Python + Selenium thì sao?
Thật không may, Selenium của Python không cung cấp một chức năng tương đương tích hợp sẵn với page.exposeFunction, vì vậy tính năng solvedCallback không thể được sử dụng đầy đủ trong môi trường này.
Thay vào đó, chúng tôi khuyên bạn nên sử dụng quan sát DOM để xác định xem CAPTCHA đã được giải quyết chưa. Ví dụ: bạn có thể kiểm tra xem hộp kiểm "Tôi không phải là người máy" đã biến mất hay đã chuyển thành dấu kiểm (✔), cho biết quá trình xác thực đã hoàn tất.
Hãy cải thiện ví dụ trước bằng cách sử dụng chiến lược này:
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
chrome_options = Options()
chrome_options.add_argument("--start-maximized")
# Bước 1: Lấy tiện ích mở rộng từ GitHub: https://github.com/capsolver/capsolver-browser-extension/releases
# Bước 2: Giải nén tiện ích mở rộng và đặt apiKey của bạn trong /assets/config.js
chrome_options.add_argument("load-extension=/path/to/CapSolver Browser Extension-v1.16.0")
# Chỉ định đường dẫn chromedriver (bỏ qua nếu đã có trong PATH)
service = Service(executable_path="chromedriver.exe")
driver = webdriver.Chrome(options=chrome_options, service=service)
def check_recaptcha_status(driver):
try:
iframe = driver.find_element(By.CSS_SELECTOR, 'iframe[src*="recaptcha"]')
driver.switch_to.frame(iframe)
# Kiểm tra xem tên lớp có cho biết hộp kiểm đã được chọn hay không
recaptcha_anchor = driver.find_element(By.ID, "recaptcha-anchor")
class_list = recaptcha_anchor.get_attribute("class")
driver.switch_to.default_content()
if "recaptcha-checkbox-checked" in class_list.split():
return True
else:
return False
except Exception as e:
print(f"Thất bại khi kiểm tra trạng thái reCAPTCHA: {e}")
driver.switch_to.default_content()
return False
try:
driver.get("https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php")
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'form[action="/recaptcha-v2-checkbox.php"]')))
# Tiện ích mở rộng sẽ tự động nhận ra và giải quyết CAPTCHA.
# Thay vì ngủ một thời gian cố định, hãy kiểm tra định kỳ.
timeout = 30
start_time = time.time()
while time.time() - start_time < timeout:
if check_recaptcha_status(driver):
print("Xác minh reCAPTCHA thành công!")
submit_button = driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]')
submit_button.click()
time.sleep(3)
driver.quit()
break
time.sleep(1)
except Exception as error:
print(error)
finally:
driver.quit()
manualSolvingTrong các ví dụ trước, quá trình giải quyết CAPTCHA bắt đầu tự động ngay sau khi trang hoàn tất tải. Tuy nhiên, trong một số trường hợp, bạn có thể cần thực hiện các thao tác khác trước—chẳng hạn như điền tên người dùng và mật khẩu—trước khi kích hoạt trình giải quyết CAPTCHA. Việc giải quyết CAPTCHA quá sớm có thể dẫn đến mã thông báo hết hạn trước khi gửi.
Tùy chọn manualSolving được thiết kế để giải quyết vấn đề này. Bằng cách đặt manualSolving: true trong /assets/config.js, bạn có thể tự động kích hoạt việc giải quyết CAPTCHA bằng một trong hai phương pháp sau:
window.postMessage({ type: 'capsolverSolve' });Ví dụ sau đây minh họa cách sử dụng cả hai phương pháp:
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
chrome_options = Options()
chrome_options.add_argument("--start-maximized")
# Bước 1: Lấy tiện ích mở rộng từ GitHub (https://github.com/capsolver/capsolver-browser-extension/releases)
# Bước 2: Giải nén tiện ích mở rộng và cấu hình apiKey của bạn trong /assets/config.js
chrome_options.add_argument("load-extension=/path/to/CapSolver Browser Extension-v1.16.0")
# Chỉ định đường dẫn chromedriver (bỏ qua nếu đã có trong PATH)
service = Service(executable_path="chromedriver.exe")
driver = webdriver.Chrome(options=chrome_options, service=service)
def check_recaptcha_status(driver):
try:
iframe = driver.find_element(By.CSS_SELECTOR, 'iframe[src*="recaptcha"]')
driver.switch_to.frame(iframe)
# Xác định xem hộp kiểm đã được chọn hay chưa
recaptcha_anchor = driver.find_element(By.ID, "recaptcha-anchor")
class_list = recaptcha_anchor.get_attribute("class")
driver.switch_to.default_content()
if "recaptcha-checkbox-checked" in class_list.split():
return True
else:
return False
except Exception as e:
print(f"Thất bại khi kiểm tra trạng thái reCAPTCHA: {e}")
driver.switch_to.default_content()
return False
try:
driver.get("https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php")
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'form[action="/recaptcha-v2-checkbox.php"]')))
# Mô phỏng đầu vào của người dùng
driver.execute_script("""
const inputA = document.querySelector('input[name="ex-a"]');
inputA.value = 'username';
const inputB = document.querySelector('input[name="ex-b"]');
inputB.value = 'password';
""")
# Mô phỏng các thao tác bổ sung
for i in range(1, 6):
time.sleep(1)
print(f"Đã chờ {i} giây...")
# Kích hoạt việc giải quyết CAPTCHA (manualSolving phải được đặt thành true trong config.js)
print("Bắt đầu giải quyết captcha...")
# Phương pháp 1: Mô phỏng việc nhấp vào nút CapSolver
try:
capsolver_button = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#capsolver-solver-tip-button")))
driver.execute_script("arguments[0].click();", capsolver_button)
except Exception as e:
print(f"Không tìm thấy nút CapSolver: {e}")
# Phương pháp 2: Kích hoạt thông qua postMessage (phương pháp thay thế)
# driver.execute_script("window.postMessage({ type: 'capsolverSolve' });")
# Chờ CAPTCHA được giải quyết và gửi biểu mẫu
timeout = 30
start_time = time.time()
while time.time() - start_time < timeout:
if check_recaptcha_status(driver):
print("reCAPTCHA verification successful!")
submit_button = driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]')
submit_button.click()
time.sleep(3)
driver.quit()
break
time.sleep(1)
except Exception as error:
print(error)
finally:
driver.quit()
CapSolver cung cấp SDK chính thức cho cả Python và Golang, cho phép bạn tích hợp giải quyết CAPTCHA với nỗ lực tối thiểu. Không giống như việc sử dụng API thô (nơi bạn phải tự xử lý createTask và getTaskResult), các SDK đơn giản hóa toàn bộ quy trình.
Kho lưu trữ GitHub chính thức:
Cũng giống như với API, trước khi giải quyết reCAPTCHA v2, bạn nên tham khảo tài liệu để biết thông tin chi tiết về các tham số JSON cần gửi:
🔗 https://docs.capsolver.com/en/guide/captcha/ReCaptchaV2/
Ngoài ra, bạn có thể sử dụng tiện ích mở rộng trình duyệt CapSolver để nhanh chóng trích xuất dữ liệu JSON cần thiết:
🔗 https://www.capsolver.com/blog/reCAPTCHA/recaptcha-v3-solver-human-score
Hãy sử dụng trang này làm ví dụ:
👉 https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php
Dữ liệu JSON cần thiết trông như thế này:
{
"type": "ReCaptchaV2TaskProxyLess",
"websiteKey": "6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9",
"websiteURL": "https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php"
}
pip install capsolver
import time
import capsolver
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
chrome_options = Options()
chrome_options.add_argument("--start-maximized")
service = Service(executable_path="chromedriver.exe")
driver = webdriver.Chrome(options=chrome_options, service=service)
# Thiết lập cấu hình CapSolver của bạn
api_key = "YOUR_API_KEY"
site_key = "6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9"
site_url = "https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php"
captcha_type = 'ReCaptchaV2TaskProxyLess'
capsolver.api_key = api_key
try:
# Giải quyết bằng SDK
solution = capsolver.solve({
"type": captcha_type,
"websiteURL": site_url,
"websiteKey": site_key,
})
token = solution["gRecaptchaResponse"]
print("token:", token)
driver.get(site_url)
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, 'form[action="/recaptcha-v2-checkbox.php"]'))
)
driver.execute_script("""
const textarea = document.getElementById('g-recaptcha-response');
if (textarea) {
textarea.value = arguments[0];
}
""", token)
submit_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[type="submit"]'))
)
submit_button.click()
time.sleep(5)
except Exception as error:
print(error)
finally:
driver.quit()
Cũng giống như với API, chúng ta sẽ tiếp tục với trang web:
👉 https://captcha.com/demos/features/captcha-demo.aspx
Hình ảnh CAPTCHA có ID demoCaptcha_CaptchaImage, và trường nhập kết quả có ID captchaCode.
Trong ImageToTextTask, bạn chỉ cần truyền hình ảnh được mã hóa base64 cho CapSolver.
import time
import capsolver
import requests
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
chrome_options = Options()
chrome_options.add_argument("--start-maximized")
service = Service(executable_path="chromedriver.exe")
driver = webdriver.Chrome(options=chrome_options, service=service)
# Thiết lập cấu hình CapSolver của bạn
api_key = "YOUR_API_KEY"
site_url = "https://captcha.com/demos/features/captcha-demo.aspx"
captcha_type = 'ImageToTextTask'
capsolver.api_key = api_key
try:
driver.get(site_url)
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, '#demoCaptcha_CaptchaImage'))
)
# Lấy chuỗi base64 từ hình ảnh
captcha_src = driver.execute_script("""
const img = document.querySelector('img[id="demoCaptcha_CaptchaImage"]');
return img ? img.getAttribute('src') : null;
""")
if not captcha_src:
raise Exception("Không thể lấy hình ảnh captcha!")
base64_image = captcha_src.split(',')[1]
solution = capsolver.solve({
"type": captcha_type,
"websiteURL": site_url,
"body": base64_image,
})
captcha_text = solution["text"]
print("Text:", captcha_text)
driver.execute_script("""
document.getElementById('captchaCode').value = arguments[0];
""", captcha_text)
validate_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, '#validateCaptchaButton'))
)
validate_button.click()
time.sleep(5)
except Exception as error:
print(error)
finally:
driver.quit()
Video demo có tính năng tiện ích mở rộng CapSolver:
Ngoài ra, CapSolver cung cấp Chương trình chia sẻ doanh thu cho nhà phát triển, cho phép các nhà phát triển và đối tác kiếm hoa hồng bằng cách tích hợp hoặc quảng bá các giải pháp CapSolver. Đó là một cách tuyệt vời để kiếm tiền từ công việc của bạn đồng thời giúp người khác giải quyết captcha hiệu quả. Để biết chi tiết đầy đủ, hãy xem:
Kế hoạch dành cho nhà phát triển CapSolver
Hướng dẫn này đã chỉ cho bạn cách tích hợp hiệu quả Selenium với CapSolver để xử lý CAPTCHA. Chúng tôi đã đề cập đến các tính năng cốt lõi của Selenium để tự động hóa web và làm nổi bật hai phương pháp tích hợp CapSolver chính:
Hiểu các điểm số từ 0.0 đến 1.0 của reCAPTCHA v3 có nghĩa là gì, cách ngưỡng hoạt động và cách CapSolver phù hợp với kiểm tra dựa trên điểm số được ủy quyền.

Khám phá CapSolver, giải pháp hàng đầu không cần lập trình để giải CAPTCHA cho tự động hóa AI vào năm 2026, để tối ưu quy trình làm việc và nâng cao thu thập dữ liệu mà không cần lập trình. Tìm hiểu về các tính năng chính, lợi ích và sử dụng có đạo đức của nó.
