如何提取处于隐藏可见性模式的文本?

时间:2017-07-29 19:43:31

标签: python selenium

我想从amazon.com中提取一本书的星数。我试过用Xpath做的,但它显示错误: -

  

selenium.common.exceptions.NoSuchElementException:消息:没有这样的   element:无法定位元素:   {"方法":"的xpath""选择器":" / HTML /体/格[4] / DIV / DIV 1 / DIV / DIV / DIV / DIV / DIV 1"}

如图所示,我想提取部分: - " 4.7颗星中有4颗" ,但由于它是可见性模式,我无法提取信息。

任何人都可以帮助我吗? 提前致谢

enter image description here

1 个答案:

答案 0 :(得分:2)

当鼠标悬停在元素上时,将显示该元素。可能有一个AJAX查询。您需要执行鼠标悬停,然后在显示时捕获文本。

  1. 为此,您需要导入ActionChains
  2. from selenium.webdriver.common.action_chains import ActionChains

    1. 然后执行鼠标悬停:
    2. element_to_hover = driver.find_element_by_xpath(...) hover_action = ActionChains(driver).move_to_element(element_to_hover) hover_action.perform()

      1. 显示元素后,您只需通过xpath找到文本元素。
      2. (也许你需要在第2步和第3步之间time.sleep(1)。)

        修改

        已经过测试并且有效:

        from selenium import webdriver
        from selenium.webdriver.common.action_chains import ActionChains
        import time
        
        chrome_path = r"chromedriver.exe"
        
        driver = webdriver.Chrome(chrome_path)
        
        driver.get("https://www.amazon.com/s/ref=sr_pg_2?rh=n%3A133140011&page=1&sort=salesrank&unfiltered=1&ie=UTF8")
        
        element_to_hover = driver.find_element_by_xpath("""//*[@id="result_0"]/div/div/div/div[2]/div[3]/div[2]/div/span/span/a/i[1]/span""")
        hover_action = ActionChains(driver).move_to_element(element_to_hover)
        hover_action.perform()
        time.sleep(2)
        stars_count = driver.find_element_by_xpath("""//*[@id="a-popover-content-3"]/div/div/div/div[1]/span""")
        print stars_count.get_attribute('innerHTML')