Selenium无法识别元素data-count属性值更新该如何解决?
问题原因
你的等待条件仅判断了通知元素是否可见,未覆盖属性更新的时机:大部分场景下通知图标会优先渲染完成(此时data-count默认值为0),等后端接口返回实际通知数量后才会动态修改该属性值,属性更新操作发生在元素可见之后,因此你读取到的是未更新的初始值。
解决方案
方案1:新增属性非0的等待条件
在元素可见后追加显式等待,直到data-count属性脱离初始值0再取值,注意get_attribute返回值为字符串类型,需要和'0'做对比:
notify_element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CLASS_NAME, 'data-count'))) # 等待data-count更新为非0值 WebDriverWait(driver, 10).until( lambda driver: notify_element.get_attribute('data-count') != '0' ) count_of_notify = int(notify_element.get_attribute('data-count'))
方案2:直接等待符合属性条件的元素
如果通知数量更新时会销毁重建原span节点而非直接修改属性,可直接等待符合属性要求的元素加载完成,避免拿到旧节点的缓存属性:
count_of_notify = int(WebDriverWait(driver, 20).until( lambda driver: (e := driver.find_element(By.CLASS_NAME, 'data-count')).get_attribute('data-count') != '0' ).get_attribute('data-count'))
内容的提问来源于stack exchange,提问作者LightM
相关产品推荐
相关产品推荐

