Я пытаюсь извлечь ссылку внутри 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>
И код, который я использую:
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/
Любые идеи о том, где моя логика подводит меня? заранее спасибо
Спасибо, что сообщили мне, я использую драматург, потому что это единственный, с которым я смог обойти DataDome






Просто опустите // и используйте следующее выражение XPath-1.0:
//div[@class = "item-info-container "]/a/@href
Это даст вам значение атрибута @href: "/imovel/32600863/".
Вероятно, вся команда будет
element_handle = page.locator('//div[@class = "item-info-container "]/a/@href').all_inner_texts()
но результатом выражения является не элемент, а атрибут, поэтому это может привести к ошибке.
Используя get_attribute:
link = page.locator('.item-info-container ').get_by_role('link').get_attribute('href')
**Редактировать:**Более одного локатора:
link_locators = page.locator('.item-info-container ').get_by_role('link').all()
for _ in link_locators:
print(_.get_attribute('href'))
Код возвращает ошибку playwright._impl._api_types.Error: Ошибка: нарушение строгого режима: locator(".item-info-container").get_by_role("link") разрешено до 30 элементов:
Добавлен код, если более одного
Только что увидел, что ты разобрался :)
Спасибо (+1) за оригинальное решение ОП.
Удалось сделать это, найдя все элементы, а затем получив атрибут после обработки всех элементов.
handleLinks = page.locator('//div[@class = "item-info-container "]/a')
for links in handleLinks.element_handles():
linkF = links.get_attribute('href')
print(linkF)
и результат будет:
/imovel/32611494/
/imovel/32642523/
/imovel/32633771/
/imovel/32527162/
/imovel/30344934/
/imovel/31221488/
/imovel/32477875/
/imovel/31221480/
/imovel/32450120/
/imovel/32515628/
/imovel/32299064/
ЭЛЕМЕНТ, который вам нужен, — это элемент
<a>. Когда у вас есть этот элемент, вам нужно использоватьget_attribute, чтобы получить его атрибутhref. Драматург не был предназначен для просмотра веб-страниц. Почему вы его используете? Есть несколько пакетов, которые были разработаны специально для парсинга.