使用Selenium自动化登录时避免频繁验证码问题
解决Selenium登录时频繁触发验证码的方法
嘿,这个场景我太熟悉了——用Selenium做自动化登录,本来想手动填验证码,结果一点击就狂弹验证码甚至报错,本质上是网站把你的Selenium会话判定成机器人了。试试下面这些实用的方法,能大幅降低被检测的概率:
1. 模拟真实用户的操作节奏与行为
网站的反爬系统会盯着“非人类”的操作模式,比如瞬间点击、无停顿的连续操作。你可以这样调整:
- 不要一打开页面就直奔验证码按钮:先移动鼠标到账号输入框,停留1-2秒再点击输入;输完账号后停顿1-3秒,再慢慢移动到验证码区域点击。
- 用
ActionChains模拟平滑的鼠标动作,避免生硬的点击:from selenium.webdriver.common.action_chains import ActionChains import random # 找到验证码元素 captcha_box = driver.find_element(By.CSS_SELECTOR, ".captcha-container") # 模拟移动到元素,随机停顿后点击 ActionChains(driver)\ .move_to_element(captcha_box)\ .pause(random.uniform(1, 3))\ .click()\ .perform() - 每一步操作之间加随机时长的停顿(不要用固定的
time.sleep(2)),更接近真实用户的行为习惯。
2. 优化Selenium配置,隐藏自动化特征
Selenium默认的配置有很多“机器人标识”,网站很容易识别:
- 禁用自动化提示:Chrome默认会显示“受自动测试软件控制”的提示,直接隐藏它:
from selenium.webdriver.chrome.options import Options chrome_options = Options() # 核心:禁用自动化检测 chrome_options.add_argument("--disable-blink-features=AutomationControlled") chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) # 初始化驱动 driver = webdriver.Chrome(options=chrome_options) - 使用真实的用户代理(User-Agent):替换成你日常用的浏览器UA(比如Chrome最新版的),避免用Selenium默认的UA:
chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36") - 加载真实的浏览器用户数据:第一次手动完成登录(包括验证码)后,保存Chrome的用户数据目录,后续Selenium启动时加载这个目录,让会话带有“老用户”的痕迹:
# 替换成你的Chrome用户数据路径,比如Windows下的默认路径 chrome_options.add_argument(r"user-data-dir=C:\Users\YourName\AppData\Local\Google\Chrome\User Data") chrome_options.add_argument("--profile-directory=Default")
3. 避免高频重复的异常操作
- 不要短时间内多次启动Selenium会话尝试登录,网站会把这种高频请求标记为恶意行为,建议间隔至少10分钟以上再重试。
- 不要一直用同一个账号测试,换几个不同的账号交替操作,减少单一账号的异常行为记录。
4. 模拟真实用户的浏览细节
有些网站会检测更细微的用户行为:
- 打开页面后先滚动几下页面,再进行登录操作,模拟用户浏览内容的动作。
- 手动点击验证码前,随意移动鼠标在页面上晃几下,不要直接直线移动到验证码按钮,让鼠标轨迹更自然。
内容的提问来源于stack exchange,提问作者Luke Dutta
相关产品推荐
相关产品推荐

