【问题标题】:Python selenium xpath geting text is emptyPython selenium xpath获取文本为空
【发布时间】:2019-04-27 02:04:35
【问题描述】:

所以我有这个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 并且它已经存在。也许没有完全加载,你们中的任何人都可以给我一些关于如何解决这个问题的建议吗?

更新:

另外,我正在尝试使用 selenium 获取它的位置和大小,但它们都将为 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

【问题讨论】:

    标签: python html selenium selenium-webdriver xpath


    【解决方案1】:

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

    【讨论】:

    • 谢谢它的工作,但我还有一个问题,你知道我怎样才能使用 selenium 获得那个 xpath 的位置吗?我的意思是如果我只是得到它就像self.driver.find_element_by_xpath(html_data.xpath).location['x'] 不起作用,我的意思是在这两种情况下 X 值或 Y 都将为 0
    • 您无法获取隐藏元素的位置。如果您有其他问题,最好创建新帖子。
    【解决方案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()
    

    【讨论】:

      【解决方案3】:

      @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()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-29
        • 2019-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-22
        • 1970-01-01
        相关资源
        最近更新 更多