Python如何清理Selenium获取元素属性中的未知空白与空字符
问题:Selenium提取属性值包含无法常规替换的空白字符
从Selenium元素中获取的属性值包含空字符或空格,已尝试
string.replace(" ","")、ticketID.replace("\n","")、ticketID.strip()等方法均未生效,目前临时使用逐位截取替换的逻辑处理,希望了解这类空白的类型及更优的处理方案。
空白类型说明
这类无法通过常规半角空格替换、strip()处理的空白大多是非打印类特殊空白字符,常见类型包括:
- 不间断空格(对应HTML中的
,Unicode编码为\u00A0) - 全角空格(Unicode编码
\u3000) - 零宽空格/零宽不连字/零宽连字(Unicode编码范围
\u200B~\u200F) - 回车符(
\r,很多场景下会和\n同时存在\r\n的换行组合) - 制表符(
\t,Unicode编码\u0009)
你可以先运行以下代码确认当前字符串中空白的具体编码,方便后续精准定位:
for char in ticketID: print(f"字符标识:{repr(char)},Unicode编码:{ord(char)}")
最优处理方案
根据你的使用场景可以选择两种通用处理方式,无需写固定位数的截取逻辑:
场景1:仅需保留指定有效字符(如票号仅为数字/字母组合)
直接用正则提取目标字符即可,完全过滤所有非目标内容:
import re # 仅保留数字,适合纯数字的票号场景 clean_ticket_id = ''.join(re.findall(r'\d+', ticketID)) # 若票号包含大小写字母+数字,改用以下规则 # clean_ticket_id = ''.join(re.findall(r'[a-zA-Z0-9]+', ticketID))
场景2:需要保留所有非空白的有效内容,仅删除所有类型空白
用正则匹配所有类型的空白字符统一删除:
import re # 匹配所有Unicode定义的空白字符删除 clean_ticket_id = re.sub(r'\s+', '', ticketID, flags=re.UNICODE) # 若包含零宽空格等特殊空白,扩展匹配规则即可 # clean_ticket_id = re.sub(r'[\s\u200b-\u200f\uFEFF\u00A0\u3000]+', '', ticketID)
内容的提问来源于stack exchange,提问作者Jean Pierre Waked
相关产品推荐
相关产品推荐

