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

Selenium处理Cookie弹窗卡顿及AttributeError报错求助

问题排查与修复方案

1. 修复AttributeError: 'WebDriver' object has no attribute 'get_attribute'错误

get_attribute()是WebElement对象的方法,仅用于获取单个元素的属性值,你直接在WebDriver实例driver上调用该方法是错误的。要获取整个页面的HTML源码,应该使用driver.page_source:

# 替换原代码中的错误写法
el = driver.page_source
el = BeautifulSoup(el, "html.parser")

2. 解决Cookie弹窗导致的代码卡住问题

你的代码逻辑存在两处不合理的地方:

  • 先等待一个特定class的按钮,再处理Cookie弹窗,但该按钮在目标页面中可能不存在,导致WebDriverWait超时卡住
  • 提前执行滚动页面操作,可能干扰Cookie弹窗的加载或定位

优化方案:

  • 优先处理Cookie弹窗,再执行滚动等后续操作
  • 简化Cookie按钮的定位逻辑,使用更稳定的文本关联定位,同时添加异常处理(避免部分页面无弹窗时报错)

修改后的完整代码片段:

driver.get(url)

# 优先处理Cookie弹窗
try:
    # 定位ACCEPT ALL按钮并点击
    accept_btn = WebDriverWait(driver, 8).until(
        EC.element_to_be_clickable((By.XPATH, "//span[text()='ACCEPT ALL']/parent::button"))
    )
    accept_btn.click()
except TimeoutException:
    # 无Cookie弹窗时跳过,继续执行后续逻辑
    pass

# 执行页面滚动
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

# 获取页面源码并解析
el = driver.page_source
el = BeautifulSoup(el, "html.parser")

# 后续逻辑...

额外建议:

  • 避免使用过长的class属性作为定位条件,网站更新时class容易变更,会直接导致定位失败
  • 可以添加页面加载完成的等待,确保页面资源加载完毕后再操作:
WebDriverWait(driver, 10).until(
    lambda d: d.execute_script('return document.readyState') == 'complete'
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:05:22