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

使用seleniumrequests做站点自动化时请求无cookie、功能异常问题求助

问题成因与解决方案

问题1:Selenium原生操作可正常登录但无法完成优惠券添加/确认操作

成因

  • 代码存在基础变量名错误:你实例化的浏览器驱动变量名为driver,但首次页面跳转使用了未定义的driver_1x.get(),会直接触发运行异常,导致后续操作无法执行。
  • 站点反爬策略拦截:多数站点会对Selenium的自动化特征做检测,包括navigator.webdriver标记、自动化控制指纹、无头浏览器特征等,优惠券添加属于高敏感操作,反爬校验规则比登录更严格,特征被识别后操作会被静默拦截。
  • 操作时序不匹配:登录完成后页面未完全加载、用户状态接口未返回就执行优惠券操作,导致目标元素未渲染、操作触发无效。
  • 元素定位失效:优惠券相关元素可能是动态生成、嵌套在iframe或shadow dom中,使用静态的id、class定位在默认上下文下无法命中目标元素。

解决方案

  • 先修正代码笔误:将driver_1x.get改为driver.get,保证基础语法正确。
  • 隐藏Selenium自动化特征,修改驱动配置:
from selenium.webdriver import FirefoxOptions
opts = FirefoxOptions()
opts.set_preference("dom.webdriver.enabled", False)
opts.set_preference('useAutomationExtension', False)
driver = Firefox(options=opts)
  • 使用显示等待控制操作时序,确保元素可交互后再执行操作:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 等待登录按钮可点击后再执行点击
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, 'auth-button__text'))).click()
# 登录后等待用户状态加载完成,再执行优惠券相关操作
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.ID, '用户信息容器的ID')))
  • 校验目标元素的上下文:如果元素嵌套在iframe中,先切换到iframe再定位;如果是shadow dom元素,通过shadow_root属性获取根节点后再查找元素。

问题2:seleniumrequests调用request方法后浏览器快速关闭、Cookie不生效、登录无响应

成因

  • seleniumrequests的底层逻辑是:调用request方法时,仅复用浏览器当前的User-Agent和Cookie发起请求,请求本身走独立的requests客户端,不会在浏览器上下文执行,请求返回的Set-Cookie默认只会存在于requests的session中,不会同步回浏览器的Cookie存储,因此站点侧看不到登录状态。
  • 无保活配置时,seleniumrequests执行完请求后,driver实例会被垃圾回收机制释放,浏览器就会自动关闭。
  • 站点API请求有校验规则:登录类接口通常需要CSRF Token、签名、自定义请求头等校验参数,直接发裸请求即使返回200,后端也不会处理业务逻辑,登录自然不会生效。

解决方案

  • 涉及状态变更的操作(登录、优惠券添加等)统一在Selenium浏览器上下文执行,seleniumrequests仅用来拉取无状态的静态资源。
  • 如果必须使用seleniumrequests发请求,执行完成后需要手动将响应Cookie同步回浏览器驱动:
resp = driver.request('POST', 'https://1xstavka.ru/user/auth', json=json)
# 同步Cookie到浏览器
for cookie in resp.cookies:
    driver.add_cookie({
        'name': cookie.name,
        'value': cookie.value,
        'domain': cookie.domain,
        'path': cookie.path
    })
# 同步后刷新页面即可生效登录状态
driver.refresh()
  • 增加浏览器保活配置,避免自动关闭:
opts = FirefoxOptions()
opts.set_preference("detach", True)
driver = Firefox(options=opts)
  • 发接口请求前,先从当前页面的HTML、localStorage、Cookie中提取CSRF Token、签名等必要校验参数,放到请求头或请求体中,避免后端拦截请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:15:07