You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium如何获取手动交互修改后的页面源码及指定表格

解决方法

核心问题分析

  • 代码未预留手动交互时间:程序打开页面后立刻等待tbody元素,但此时你还未完成手动数据选择,表格尚未生成,必然找不到元素。
  • 元素写入方式错误:file.write(element)直接写入WebElement对象会触发报错,需获取元素的HTML内容或整个页面源码。
  • 路径转义问题:'D:\university\geckodriver.exe'中的反斜杠会被转义,可能导致驱动无法正常加载。

修改后的代码

import time
from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

links = ['https://priem.gubkin.ru/#/page/enrollment']
# 用原始字符串避免路径转义问题
s = Service(executable_path=r'D:\university\geckodriver.exe')

driver = webdriver.Firefox(service=s)
try:
    driver.maximize_window()

    for link in links:
        driver.get(link)
        print("请手动完成数据选择操作,完成后按回车继续...")
        # 等待用户手动交互,按下回车后恢复执行
        input()

        # 等待表格tbody加载完成
        WebDriverWait(driver, 30).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "tbody")))
        
        # 选项1:获取整个页面修改后的完整源码
        page_source = driver.page_source
        with open('GUBKINA_FULL.html', 'w', encoding='utf-8') as file:
            file.write(page_source)
        
        # 选项2:仅获取目标表格的HTML内容
        table_element = driver.find_element(By.CSS_SELECTOR, "tbody").parent  # 获取完整table而非仅tbody
        table_html = table_element.get_attribute('outerHTML')
        with open('GUBKINA_TABLE.html', 'w', encoding='utf-8') as file:
            file.write(table_html)
        
        print("页面/表格源码已保存")

except Exception as ex:
    print(f"执行出错:{ex}")
finally:
    driver.quit()

关键修改说明

  1. 添加手动交互等待:通过input()暂停程序,等你完成手动数据选择、表格出现后,按回车继续执行,此时tbody元素已存在。
  2. 修复路径转义:使用原始字符串r'路径'避免反斜杠被转义,确保驱动正常加载。
  3. 正确获取HTML内容:
    • 整个页面修改后的源码用driver.page_source获取,这是交互后的完整页面代码。
    • 仅获取表格的话,先定位tbody,再取其父元素(完整table),通过get_attribute('outerHTML')获取表格的完整HTML。
  4. 指定编码:写入文件时指定utf-8编码,避免中文乱码。

额外注意事项

  • 如果表格嵌套在iframe中,需先切换到iframe再查找元素:
    # 示例:通过id定位iframe并切换
    iframe = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "iframe-id")))
    driver.switch_to.frame(iframe)
    # 之后再执行查找tbody的逻辑
    
  • 手动操作时间不受限制,只要不按回车,程序会一直等待。

内容的提问来源于stack exchange,提问作者user_bktv_all3103

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 02:00:11