我正在尝试抓取具有两个框架的html表。当切换到第一个时,代码运行良好,但是当切换到默认值然后再切换到第二帧时,我无法获得完整的html代码。
driver = webdriver.Chrome('/Users/Administrador/Documents/chromedriver')
main_url = 'https://www.justiciacordoba.gob.ar/Estatico/JEL/Escrutinios/ReportesEleccion20190512/default.html'
driver.get(main_url)
#This works fine:
driver.switch_to.frame("topFrame")
# This doesnt:
driver.switch_to.default_content()
driver.switch_to.frame('mainFrame')
page = driver.page_source
page
输出:
'<html><head></head><body></body></html>'
即是整页!
<frame src="about:blank" name="mainFrame" align="center">
#document
<html>
<head></head>
<body></body>
</html>
</frame>
用鼠标右键单击,选择“检查”或“检查元素”,您将在“开发”窗口的“元素”选项卡中看到框架所具有的全部。
在Chrome中,您也可以按Ctrl + Shift + I,您将直接进入此标签。
似乎您看到的是正确的行为。当WebDriver的焦点位于name为topFrame的<frame>
内时,除非您从<select>
元素中选择值并启动搜索,否则<frame>
内的元素将带有name作为mainFrame不会重新呈现。因此,您会看到以下行为:
代码块:
driver.get('https://www.justiciacordoba.gob.ar/Estatico/JEL/Escrutinios/ReportesEleccion20190512/default.html')
driver.switch_to.frame("topFrame")
driver.switch_to.default_content()
driver.switch_to.frame('mainFrame')
print(driver.page_source)
控制台输出:
<html><head></head><body></body></html>
在这种情况下,如果您仍然想从顶级内容中提取完整的HTML,则可以如下切换到default_content()
:
代码块:
driver.get('https://www.justiciacordoba.gob.ar/Estatico/JEL/Escrutinios/ReportesEleccion20190512/default.html')
driver.switch_to.frame("topFrame")
driver.switch_to.default_content()
driver.switch_to.frame('mainFrame')
print(driver.page_source)
driver.switch_to.default_content()
print(driver.page_source)
控制台输出:
<html><head></head><body></body></html>
<html><head></head><frameset rows="190,*" cols="*" framespacing="0" frameborder="NO" border="0" id="fset">
<frame src="Index.html" name="topFrame" scrolling="NO" cd_frame_id_="887435be8ea834d3aec3a905bb2f8019">
<frame src="about:blank" name="mainFrame" align="center" cd_frame_id_="a1abd873a60c8db45dc83e5334321cbc">
</frameset><noframes></noframes>
</html>