以下代码有效。它返回默认加载表中的数据(利用此处提供的答案:link,但如何访问其他表(可通过单击“合同”按钮并从菜单中选择其他合同找到) (例如,2019年3月)?
driver.get("http://www.cmegroup.com/tools-information/quikstrike/treasury-analytics.html")
# Need to include some more time here for data in iframe to load?
driver.implicitly_wait(3)
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))
soup = BeautifulSoup(driver.page_source, 'html.parser')
CMEtreasuryAnalytics._table = soup.select('table.grid')[0]
我尝试了此操作,但返回了以下错误: NoSuchFrameException:消息:没有这样的框架:元素不是框架
driver.get("http://www.cmegroup.com/tools-nformation/quikstrike/treasury-analytics.html")
cDate = 'Dec 2018'
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))
elements = driver.find_elements_by_class_name("square-corners ")
options = [element.get_attribute("innerText") for element in elements]
if cDate in options:
element = elements[options.index(cDate)]
else:
pass
driver.switch_to.frame(element)
我也尝试过'click()',但也无法正常工作。我是硒新手,不胜感激关于如何访问所述数据的一些建议。我正在使用python和chrome webdriver。
答案 0 :(得分:0)
好。我想我已经解决了。菜单位于iFrame中, 因此,在获取元素详细信息之后,需要单击菜单,然后单击element.click(),然后抓取显示的数据。最终代码如下,但是我不知道这是否是最简单的方法。
driver.get("http://www.cmegroup.com/tools-nformation/quikstrike/treasury-analytics.html")
cDate = 'Jun 2019'
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))
elements = driver.find_elements_by_class_name("square-corners ")
options = [element.get_attribute("innerText") for element in elements]
if cDate in options:
element = elements[options.index(cDate)]
else:
pass
# Click the dropdown menu labelled 'Contracts'
driver.find_element_by_xpath('//*[@id="ctl00_MainContent_ucViewControl_IntegratedStrikeAsYield_ucContractPicker_ucTrigger_lnkTrigger"]').click()
driver.implicitly_wait(1)
element.click()
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))
soup = BeautifulSoup(driver.page_source, 'html.parser')
CMEtreasuryAnalytics._table = soup.select('table.grid')[0]
更新: 上面的工作了一段时间,但随后失败并显示以下消息。因此,也许这是正确的选择,但我需要更好的方法从标记为“合同”的下拉列表中选择一个选项。怎么做? 消息:未知错误:元素在点(511,475)处不可单击。其他元素将获得点击:<< / p>