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
相关产品推荐
相关产品推荐

