You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium长按功能失效,如何修复以绕过Walmart验证码

Selenium长按鼠标绕过沃尔玛PerimeterX验证的修改方案

原代码核心错误

  • 调用move_to_element_with_offset()时参数计算错误:该方法的偏移量是相对于元素左上角的相对坐标,不需要额外叠加元素的全局坐标frame_x/frame_y,原代码的偏移量直接超出了元素范围,自然触发不了按住效果
  • 动作逻辑过于机械:沃尔玛用的PerimeterX验证码对人工操作的行为特征校验严格,无过渡的瞬时点击+硬等待的模式很容易被判定为机器人
  • 动作执行逻辑冗余:重复调用release()和perform()反而会增加被检测的概率

修改后的可运行代码

from selenium import webdriver
from selenium.webdriver import ActionChains
import time

driver = webdriver.Firefox()
driver.get('https://www.walmart.com/blocked?url=L2lwL0Nsb3JveC1EaXNpbmZlY3RpbmctV2lwZXMtMjI1LUNvdW50LVZhbHVlLVBhY2stQ3Jpc3AtTGVtb24tYW5kLUZyZXNoLVNjZW50LTMtUGFjay03NS1Db3VudC1FYWNoLzE0ODk4MzY1&uuid=9ed7f800-f288-11eb-ad50-1b3c9c7d7310&vid=9cf07351-f288-11eb-9ab5-ef26d206453b&g=b')

# 等待验证码元素加载完成,避免找不到元素报错
time.sleep(2)
element = driver.find_element_by_xpath("//div[@id='px-captcha']")
action = ActionChains(driver)

# 仅计算元素中心的相对偏移,不需要叠加元素全局坐标
x_offset = element.size['width'] * 0.5
y_offset = element.size['height'] * 0.5

# 模拟人手移动停顿的动作特征,降低被识别概率
action.move_to_element_with_offset(element, x_offset, y_offset)
action.pause(0.3)
action.click_and_hold()
action.pause(6) # 一般PX验证按住4-8秒即可通过,不需要10秒长等待
action.release()
action.perform()

# 等待验证结果加载
time.sleep(2)

额外优化建议

  • 如果还是被拦截,可以给Firefox配置反检测参数,比如禁用webdriver特征、修改navigator字段
  • 按住过程中可以加入1-2像素的小范围随机鼠标移动,更接近真人操作特征
  • 不要用无头模式运行,无头模式下PerimeterX的拦截率会大幅提升

内容的提问来源于stack exchange,提问作者user1424739

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:24:04