Python selenium xpath получение текста пусто - PullRequest
0 голосов
/ 25 ноября 2018

Итак, у меня есть эта ссылка , и я пытаюсь получить текст из этого XPath //div[@class='titlu'], но по какой-то причине иногда я получаю текст таким, каким он должен быть, а иногда яполучить пустую строку, даже если сайт содержит этот текст.

Что я пробовал:

wait = WebDriverWait(self.driver, 10)   
wait.until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "Ap. de lux 3 ")))
e = self.driver.find_element_by_xpath(html_data.xpath)

также:

wait = WebDriverWait(self.driver, 10)
wait.until(EC.presence_of_element_located((By.XPATH, xpath)))
e = self.driver.find_element_by_xpath(xpath)

, а также я использовал и этот тип ожидания:

self.driver.implicitly_wait(10)

Как я получаю текст в данный момент:

self.driver.find_element_by_xpath(xpath).text

проблема, с которой я здесь столкнулся, заключается в том, что текст отказывается появлятьсяв некоторых случаях и в других случаях это так, хотя на самом деле XPath найден и уже существует.Может быть, загружен не полностью, кто-нибудь из вас может дать мне совет о том, как я могу это исправить?

ОБНОВЛЕНИЕ:

Кроме того, я пытаюсь определить местоположение и размер этого с помощью селена, но оба они будут равны 0. Любая идея, как можноЯ это исправлю?

with, height = self.driver.find_element_by_xpath(html_data.xpath).size x, y = self.driver.find_element_by_xpath(html_data.xpath).location

Ответы [ 3 ]

0 голосов
/ 25 ноября 2018

Вы можете выполнить скрипт для доступа.Я узнал этот метод из ответа @ pguardiario

from selenium import webdriver

d = webdriver.Chrome()
d.get("https://www.imobiliare.ro/inchirieri-apartamente/sibiu/hipodrom-4/apartament-de-inchiriat-3-camere-X84T100B2?lista=2361394")
items = d.execute_script("return [...document.querySelectorAll('div.titlu')].map(item => item.innerText)")
print(items)
d.quit()
0 голосов
/ 25 ноября 2018

@ QHarr answer возвращает требуемый вывод (+1), но в качестве альтернативы тому же результату можно добиться с помощью общего подхода без использования JavaScript-исполнителя:

from selenium import webdriver

d = webdriver.Chrome()
d.get("https://www.imobiliare.ro/inchirieri-apartamente/sibiu/hipodrom-4/apartament-de-inchiriat-3-camere-X84T100B2?lista=2361394")
items = [item.get_attribute('innerText') for item in d.find_elements_by_xpath("//div[@class='titlu']")]
print(items)
d.quit()
0 голосов
/ 25 ноября 2018

первый элемент //div[@class='titlu'] скрыт, и вы не получите значение, если используете .text, поскольку он будет извлекать только видимый текст, использовать .get_attribute('textContent') или выбрать второй элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...