Python Selenium XPath获取文本为空

时间:2018-11-25 01:42:04

标签: python html selenium selenium-webdriver xpath

所以我有这个link,我试图从这个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 :(得分:2)

//div[@class='titlu']的第一个元素是隐藏的,如果使用.text,则不会获得价值,因为它只会提取可见的文本,使用.get_attribute('textContent')或选择第二个元素。

答案 1 :(得分:2)

您可以执行脚本进行访问。我从@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()

答案 2 :(得分:1)

@QHarr答案返回所需的输出(+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()