如何用Selenium Python提取网页中的“Glenvale”文本?
解决方法
方法1:基于元素文本拆分提取
先定位到包含完整地址的元素(比如页面中显示地址的<p>标签),再通过字符串拆分获取"Glenvale":
# 定位地址元素(根据页面实际class调整,示例为页面常见的地址类) address_element = driver.find_element(By.XPATH, '//p[contains(@class, "css-1r0si1e")]') full_address = address_element.text # 按地址格式拆分:"街道, 郊区 州 邮编",取逗号后、州名前的部分 suburb = full_address.split(', ')[1].split(' ')[0] print(suburb) # 输出Glenvale
方法2:用JS执行XPath字符串函数直接提取
通过JavaScript执行XPath的字符串处理逻辑,绕开元素顺序依赖直接提取目标文本:
suburb = driver.execute_script(""" return document.evaluate( 'substring-before(substring-after(//p[contains(text(), "QLD")]/text(), ", "), " QLD")', document, null, XPathResult.STRING_TYPE, null ).stringValue; """) print(suburb)
方法3:定位语义化元数据节点
如果页面包含schema.org规范的元数据标签,可直接定位标注郊区的节点:
suburb_element = driver.find_element(By.XPATH, '//span[@itemprop="addressLocality"]') suburb = suburb_element.text print(suburb)
原XPath失败的原因
你之前用的//*[@id="__next"]/div/div[2]/div/div[4]/div/div/div[8]/div/div/p/text()[6]存在两个核心问题:
- 强依赖绝对路径与节点顺序:网页结构只要微调(比如新增/删除模块),路径就会直接失效;
- Selenium不支持直接获取文本节点:
text()[6]选取的是第6个文本节点,但find_element仅能返回WebElement对象,无法直接操作文本节点,调用.text会触发异常。
内容的提问来源于stack exchange,提问作者Clay Burnett
相关产品推荐
相关产品推荐

