使用Python Playwright提取a标签href属性值遇问题,求解决
问题:提取a标签href属性值失败,始终获取文本
我尝试提取a标签href中的链接,但始终获取到的是元素内的文本。
网页代码如下:
<div class="item-info-container "> <a href="/imovel/32600863/" role="heading" aria-level="2" class="item-link xh-highlight" title="Apartamento T3 na avenida da Liberdade, São José de São Lázaro e São João do Souto, Braga"> Apartamento T3 na avenida da Liberdade, São José de São Lázaro e São João do Souto, Braga </a> </div>
我使用的代码为:
element_handle = page.locator('//div[@class="item-info-container "]//a').all_inner_texts()
无论是否指定//a[@href],输出始终是标题文本:
Apartamento T3 na avenida da Liberdade, São José de São Lázaro e São João do Souto, Braga
而我实际想要获取的是:
/imovel/32600863/
请问我的逻辑哪里出错了?
原因与解决办法
核心问题:你调用的
all_inner_texts()方法本身就是用来提取元素内部文本的,和元素的属性完全不相关,所以不管怎么调整定位器,返回的都是a标签里的标题内容,这是方法用错了。正确实现方式:要获取href属性值,得用专门获取属性的方法,以Playwright为例:
- 获取单个元素的href:
href_value = page.locator('//div[@class="item-info-container "]//a').get_attribute('href')- 批量获取多个元素的href:
# 方式一:遍历元素列表 href_list = [] elements = page.locator('//div[@class="item-info-container "]//a').all() for elem in elements: href_list.append(elem.get_attribute('href')) # 方式二:用evaluate_all批量处理 href_list = page.locator('//div[@class="item-info-container "]//a').evaluate_all('els => els.map(el => el.getAttribute("href"))')
如果需要完整的绝对路径URL,把el.getAttribute("href")换成el.href即可,它会自动拼接当前页面的域名。
内容的提问来源于stack exchange,提问作者gustavo matteo
相关产品推荐
相关产品推荐

