如何用Selenium和Python提取列表元素::before与::after间文本及排错
问题解决:Selenium提取文本时的AttributeError及账号验证修复
错误原因分析
- 元素列表导致的属性错误:你使用的
EC.presence_of_all_elements_located()方法返回的是匹配到的所有元素组成的列表,而列表对象没有.text属性,这是报错的核心原因。 - 重复调用
.text的冗余错误:就算获取到单个元素,你的代码先把元素文本赋值给confirm,之后又写confirm.text,等于对字符串再次调用.text,这也会引发错误。
修复方案
目标元素id="user-salutation"是唯一的(HTML中id具备唯一性),直接用presence_of_element_located()获取单个元素即可。另外,提取文本后建议用.strip()去除前后多余空格,避免因格式问题导致比对失败。
修复后的代码
# 等待单个目标元素加载完成 user_salutation = WebDriverWait(driver, 20).until( EC.presence_of_element_located((By.ID, 'user-salutation')) ) # 提取文本并去除前后空白 confirm_text = user_salutation.text.strip() # 比对验证 if confirm_text == f"Hi {NewUserName}": print("User Account Created") else: print("Issue occurred could not confirm user account created, please confirm creation was successful")
补充说明
关于你提到的::before和::after伪元素:这两个是CSS生成的内容,不属于DOM元素的文本内容,Selenium无法直接获取。但从你的HTML结构来看,目标文本Hi TQLJOlsen1是<a>元素的直接文本内容,通过.text就能正确提取,伪元素不会干扰这个结果。
内容的提问来源于stack exchange,提问作者DaHawg
相关产品推荐
相关产品推荐

