发布时间:
来源:CSDN
【资料图】
上海银行间同业拆借利率在运行过程中发现iframe标签已经不见: 查看元素发现ifram标签已经不见
# In[7]:browser.switch_to.frame("volume10BondDealQuotesEN")data = browser.page_sourcedata
执行这个报错:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="volume10BondDealQuotesEN"]"}(Session info: chrome=105.0.5195.127)
如何解决?注释掉browser.switch_to.frame这行代码
# In[7]:#browser.switch_to.frame("volume10BondDealQuotesEN")data = browser.page_sourcedata
注释后发现获取table的出现问题了,经过debug修改成table[3]改为table[12],为什么是table[12],我用的是PyCharm开发工具debug查看table如下: 从这个里面去找
import pandas as pdtable = pd.read_html(data) # table是一个列表,里面有该网页里的所有表格df = table[12]df
运行结果是:
这里面有用的是第2、3、5列
import pandas as pdtable = pd.read_html(data) # table是一个列表,里面有该网页里的所有表格#df = table[3]df = table[12]# 提取所需列,并修改列名df = df[[1, 2, 4]]df.columns = ["期限", "Shibor(%)", "涨跌(BP)"]M_1 = df[df["期限"] == "1M"]["Shibor(%)"]M_3 = df[df["期限"] == "3M"]["Shibor(%)"]# 计算3M利率 - 1M利率diff = float(M_3) - float(M_1)diff = round(diff, 3) # 保留3位小数diff
运行后结果是:
这里面的url_2代码注释掉:
from selenium import webdriverimport pandas as pdbrowser = webdriver.Chrome()url = "http://www.shibor.org"browser.get(url)# url_2 = "http://www.shibor.org/shibor/web/html/shibor.html" # 这个得访问过上面的网址,才能访问这个网站# browser.get(url_2)data = browser.page_sourcetable = pd.read_html(data) # table是一个列表,里面有该网页里的所有表格df = table[12]# 修改列名df = df[[1, 2, 4]]df.columns = ["期限", "Shibor(%)", "涨跌(BP)"]M_1 = df[df["期限"] == "1M"]["Shibor(%)"] # 变量命名不可以是1MM_3 = df[df["期限"] == "3M"]["Shibor(%)"]# 计算3M利率 - 1M利率diff = float(M_3) - float(M_1)diff = round(diff, 3) # 保留3位小数diff
最后这个地方,如果浏览器较新的话,browser.find_element_by_xpath这个地方会报错,要改成browser.find_element,如下:
# # 补充知识点:浏览器同级页面切换 - switch_to.window()函数讲解# In[27]:from selenium import webdriverbrowser = webdriver.Chrome()url = "https://www.baidu.com/s?rtt=1&tn=news&word=阿里巴巴"browser.get(url)# 模拟点击第一条新闻链接,会新打开一个浏览器窗口展示该新闻详情 //*[@id="1"]/div/h3/a#browser.find_element_by_xpath("//*[@id="1"]/div/h3/a").click()browser.find_element(by=By.XPATH,value="//*[@id="1"]/div/h3/a").click()handles = browser.window_handles # 获取当前浏览器的所有窗口句柄browser.switch_to.window(handles[-1]) # 切换到最新打开的窗口data = browser.page_source # 此时获取的网页源代码就是最新打开窗口的内容data# In[29]:handles = browser.window_handles # 获取当前浏览器的所有窗口句柄browser.switch_to.window(handles[-1]) # 切换到最新打开的窗口data = browser.page_sourcedata