【问题标题】:How to get the full html code when switching frames using selenium python使用selenium python切换帧时如何获取完整的html代码
【发布时间】:2026-01-24 23:15:02
【问题描述】:

我正在尝试抓取一个有两个框架的 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>'

【问题讨论】:

  • 请不要更改您已收到经过充分研究的答案的问题。一旦您收到规范答案,更改问题可能会使所有现有答案无效,并且可能对未来的读者没有用处。如果您的要求发生了变化,请随时提出一个新问题。 * 贡献者将很乐意为您提供帮助。目前我已将问题恢复到初始状态。

标签: python selenium selenium-webdriver web-scraping frame


【解决方案1】:

整页!

<frame src="about:blank" name="mainFrame" align="center">
    #document
    <html>
        <head></head>
        <body></body>
    </html>
</frame>

单击鼠标右键,选择“检查”或“检查元素”,您将在“开发”窗口的“元素”选项卡中看到框架的全部内容。

在 Chrome 中,您也可以按 Ctrl+Shift+I 并直接进入此选项卡。

【讨论】:

  • 那不是整页。有桌子!!
【解决方案2】:

您似乎看到了正确的行为。当WebDriver 的焦点位于&lt;frame&gt; 内且nametopFrame 时,除非您从&lt;select&gt; 元素中选择值并启动搜索,否则元素在&lt;frame&gt; 中,name 作为 ma​​inFrame 不会重新呈现。因此,您会看到以下行为:

  • 代码块:

    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>
    

【讨论】:

  • 您好!非常感谢您的回答。我已经编辑了原始帖子,您可以看到我实际上想要做什么。我正在尝试从 mainFrame 中的表中提取值,但我不能。我虽然这是由于在帧之间切换时出现错误,但也许这不是错误所在。你怎么看?
  • @EmilioChambouleyron 请再次阅读答案。我已经特别提到了当WebDriver的焦点位于名称为topFrame的中时,除非您从
  • 好的,我明白了。事实上,我确实发起了搜索。我已经编辑了原始帖子,以便您可以看到。
  • @EmilioChambouleyron 这是一个完全不同的问题。恐怕,理想情况下,您应该针对您的新要求提出一个新问题。
最近更新 更多