如何用Selenium Python提取img标签alt属性值?遇动态id难题
解决动态ID下提取图片alt属性的问题
针对动态ID(仅部分数字变动)的场景,无需依赖完整ID定位元素,以下几种实用方法可直接提取图片的alt属性:
方法1:匹配ID的固定片段
观察ID格式可知,大部分字符串固定,仅中间两处数字变动,可通过字符串匹配定位父元素:
- 兼容多数环境的写法:
//*[starts-with(@id, 'j_id1102997597_32d04ef7:0:j_id1102997597_32d04d36:') and contains(@id, ':j_id1102997597_32d04d7a:') and ends-with(@id, ':j_id1102997597_32d04d8e:j_id415163359_4cfbfc60')]/img/@alt
- 支持正则的XPath 2.0+环境写法(如Selenium配合现代浏览器):
//*[matches(@id, 'j_id1102997597_32d04ef7:0:j_id1102997597_32d04d36:\d+:j_id1102997597_32d04d7a:\d+:j_id1102997597_32d04d8e:j_id415163359_4cfbfc60')]/img/@alt
方法2:直接定位图片元素
跳过动态ID的父元素,利用图片自身或容器的固定特征定位:
- 若图片有固定class:
//img[@class='target-image-class']/@alt
- 若图片在固定ID的容器内:
//div[@id='fixed-container']//img/@alt
- 提取页面所有图片的alt属性:
//img/@alt
方法3:利用ID的数字关联特征
ID中两处变动的数字完全一致(如都是2、1、0),可通过字符串截取匹配该关联:
//*[substring-before(substring-after(@id, 'j_id1102997597_32d04d36:'), ':') = substring-before(substring-after(@id, 'j_id1102997597_32d04d7a:'), ':')]/img/@alt
内容的提问来源于stack exchange,提问作者Daniela Quila
相关产品推荐
相关产品推荐

