所以我有这个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
答案 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()