我试图从纽约证券交易所网站上榨取股票价格。例如,在page for IBM上,我想从 Quote 数据网格中删除与 Last Price 对应的字段。我相信这个网格是使用react.js生成的。使用浏览器中的开发人员工具,我可以找到所需的数据:
<span class="rtq-d big" domid="LastPrice">148.95</span>
因此,在页面完全加载的情况下,应该可以使用domid="LastPrice"
搜索范围。但我似乎无法以编程方式加载网格。天真的刮刀在这项任务中失败并不特别令人惊讶,但我也很难通过硒使用PhantomJS和Firefox。例如,下面的代码表明虽然可以在网格外找到DOM元素,但无法找到网格中所需的<span>
。奇怪的是,我实际上可以看到firefox窗口中加载的网格(由selenium打开),但即使在加载后,它似乎也无法以编程方式访问。
In [1]: from selenium import webdriver
In [2]: driver = webdriver.Firefox()
In [3]: driver.get('http://www.nyse.com/quote/XNYS:IBM')
In [4]: driver.find_element_by_xpath('//div[@id="content-1500013182"]') # outside grid
Out[4]: <selenium.webdriver.remote.webelement.WebElement (session="a67fa410-8033-472a-8932-ccc40ef026a3", element="{61a9aded-1b9d-4995-9a74-031c3cff5e55}")>
In [5]: driver.find_element_by_xpath('//span[@domid="LastPrice"]') # inside grid
Out[5]: NoSuchElementException: Message: Unable to locate element: {"method":"xpath","selector":"//span[@domid=\"LastPrice\"]"}
我是否遗漏了某种咒语,将硒驱动程序与页面上实际加载的内容同步?或者我是否需要从驱动程序运行一些javascript以确保正确加载该页面?
答案 0 :(得分:2)
您想要的span元素位于iframe中,这意味着无法直接找到span元素。要访问它,您必须先指示webdriver对象切换到iframe:
iframes = driver.find_elements_by_xpath("//div[@class='panel-body']//iframe")
len(iframes) # 5
driver.switch_to.frame(iframes[0])
driver.find_element_by_xpath('//span[@domid="LastPrice"]') # should work now