提交 0a40ced9 authored 作者: 周千淇's avatar 周千淇

上传新文件

上级 d3f84be6
import ddddocr
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import traceback
import re
DRIVER_PATH = "chromedriver-win64\\chromedriver.exe"
VOTE_URL = "https://test-h5.hudongtang.cn/doings/?eid=144&channel=web&withUserAgent=true#/home/aqe"
CAPTCHA_CONFIG = {
"tip_locator": (By.CLASS_NAME, "code-thumb"), # 顶部提示
"img_locator": (By.CLASS_NAME, "code-picture"), # 验证码图片
"success_locator": (By.XPATH, "//*[contains(text(), '验证成功') or contains(text(), '投票成功')]")
}
# 初始化ddddocr
ocr = ddddocr.DdddOcr(det=True)
# 初始化浏览器
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(service=Service(DRIVER_PATH), options=options)
driver.maximize_window()
wait = WebDriverWait(driver, 15)
def test_point_captcha_auto_verify():
is_pass = False
target_rects = []
try:
# 1. 打开页面+触发验证码
driver.get(VOTE_URL)
print("打开投票链接,等待加载...")
time.sleep(4)
# 点击投票按钮
vote_btn = wait.until(EC.element_to_be_clickable((By.TAG_NAME, "button")))
vote_btn.click()
print("点击投票按钮,触发点选验证码")
time.sleep(3)
# 定位验证码图片
captcha_img = wait.until(EC.presence_of_element_located(CAPTCHA_CONFIG["img_locator"]))
print("定位到验证码图片(code-picture)")
# 截图+识别
captcha_img.screenshot("captcha.png")
with open("captcha.png", "rb") as f:
target_rects = ocr.detection(f.read())
print(f"机器识别到 {len(target_rects)} 个目标矩形坐标:{target_rects}")
# 4点击
action = ActionChains(driver)
for rect in target_rects:
x1, y1, x2, y2 = rect
center_x = (x1 + x2) / 2
center_y = (y1 + y2) / 2
action.move_to_element_with_offset(captcha_img, center_x, center_y).click().perform()
print(f"✅ 机器点击矩形中心坐标:({center_x:.1f}, {center_y:.1f})")
time.sleep(0.1)
# 5. 验证是否自动通过
print("✅ 等待验证码自动验证...")
time.sleep(2)
try:
success_elem = wait.until(EC.presence_of_element_located(CAPTCHA_CONFIG["success_locator"]))
if success_elem:
is_pass = True
print("🎉 验证码自动验证通过!")
except:
print("验证码验证失败(机器逻辑未通过)")
except Exception as e:
print("测试出错:", str(e))
print("报错详情:", traceback.format_exc())
finally:
print("\n===== 测试结果汇总 =====")
print(f"是否通过验证:{is_pass}")
print(f"机器识别矩形坐标:{target_rects}")
time.sleep(3)
driver.quit()
if __name__ == "__main__":
test_point_captcha_auto_verify()
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论