Python:Selenium find by xpath返回空列表

时间:2017-06-06 20:01:22

标签: python html selenium xpath

我正在尝试在此网站上获取交互式图表的开放,高,低,关闭值:Currency Chart from website

这是元素的xpath://*[@id="chart-area"]/div/div[3]/table/tbody/tr[1]/td[2]/div/div[3]/div[2]/div/span[1]

我在html调试器上添加了一个属性name,尝试find_elements_by_name但它也返回了一个空列表。 find_by_class_name方法返回无法搜索复合值的错误。每当我将鼠标悬停在图表上并在控制台中打印时,我都需要获得Open,High,Low和Close值。

我试图在图表区域移动鼠标的同时获取值。我不知道是不是因为该字段是动态的,因为它在图表上滚动时会发生变化。

编辑:值位于图表的左上角,当您在图表区域中移动鼠标时,光标将捕捉到该点并更新数据。即使在数据的原始版本Raw Data Website中,在使用class names="line-content"css_selector = 'html body'xpath='/html/body/table/tbody/tr/td[2]'时,我也无法获取元素的内容。

输出如下:Message: Unable to locate element: .line-contentMessage: Unable to locate element: /html/body/table/tbody/tr/td[2]

我的代码:

driver = webdriver.Firefox()
driver.get("https://www.investing.com/currencies/eur-usd-chart")
open_value_1 = driver.find_elements(By.XPATH, '//*[@id="chart-area"]/div/div[3]/table/tbody/tr[1]/td[2]/div/div[3]/div[2]/div/span[1]')

# If mouse moved and the value changed - print it
while True:
    open_value_2 = driver.find_elements(By.XPATH, '//*[@id="chart-area"]/div/div[3]/table/tbody/tr[1]/td[2]/div/div[3]/div[2]/div/span[1]')
    if open_value_2 is not open_value_1:
        print(open_value_2)
    time.sleep(1)

1 个答案:

答案 0 :(得分:-1)

您的Xpath可能存在一些问题

(//*[@id="chart-area"]/div/div[3]/table/tbody/tr[1]/td[2]/div/div[3]/div[2]/div/span[1]) 

你可以尝试下面的Xpath

//*[@id="chart-area"]/div/div[3]/table/tbody/tr[1]/td[2]/div/div[3]/div[1]/div/span[1]