我正试图从纽约证券交易所的网站上获得一个股票的价格。例如,在IBM页面上,我想从Quote数据网格中抓取与Last对应的字段。我相信这个网格是使用react.js生成的。使用我的浏览器中的开发工具,我可以找到所需的数据:
<span class="rtq-d big" domid="LastPrice">148.95</span> 因此,在页面完全加载后,应该可以使用domid="LastPrice"搜索span。但我似乎无法按程序加载那个网格。这并不奇怪,天真的刮板在这个任务上失败了,但我也在通过selenium使用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\"]"}我是不是遗漏了某种咒语,可以使selenium驱动程序与页面上实际加载的内容同步?或者,我是否需要从驱动程序中运行一些javascript来确保正确加载该页面?
发布于 2016-05-13 05:05:59
您想要的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 nowhttps://stackoverflow.com/questions/37187068
复制相似问题