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

