Selenium WebDriver多元素find_element_by_xpath问题:循环仅返回首个值
问题分析与解决方案
嘿,我一眼就瞅出你这循环只返回第一个元素的问题所在啦!
核心原因:XPath搜索范围不对
你在循环里写的main.find_element_by_xpath('//h2[@class="_34283..."]'),这里的//是从整个网页的根节点开始搜索,而不是从当前循环的main元素下面找。所以不管遍历到哪个main,它都会揪出页面上第一个匹配这个XPath的标题元素,结果自然每次都重复。
修复方案
把XPath开头的//改成.//,这个.代表从当前节点(也就是循环里的main元素)的子节点开始搜索,这样就能精准定位到每个商品块里的对应标题了。
修正后的代码片段参考:
mains = browser.find_elements_by_xpath('//div[@class="_433675f"]') for main in mains: # 重点:加上 .// 前缀限制搜索范围 pname = main.find_element_by_xpath('.//h2[@class="_34283xxxx"]') # 记得补全完整的class名 print(pname.text) # 可以打印验证结果
额外小建议
- 一定要把
_34283...补全成网页里实际的完整class名,不然XPath可能匹配不到元素。 - 也可以试试用CSS选择器,写法会更简洁直观,比如:
pname = main.find_element_by_css_selector('h2._34283xxxx')
内容的提问来源于stack exchange,提问作者dr.coccodrillus
相关产品推荐
相关产品推荐

