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

如何在Python Selenium中设置页面源码?读取本地HTML文件定位元素

当然可以实现这个需求!不过可惜Selenium并没有提供你示例里写的set_source()方法,但我们有好几种靠谱的替代方案能达成同样的效果,下面给你详细拆解:

方案1:使用Data URL直接加载HTML内容

这是最简单直接的方式,把读取到的HTML内容转换成Data URL,通过driver.get()来加载:

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()

# 读取本地HTML文件内容
with open('my_file.html', 'r', encoding='utf-8') as f:
    html_content = f.read()

# 用Data URL加载页面
driver.get(f"data:text/html;charset=utf-8,{html_content}")

# 现在就可以正常执行元素定位了
target_element = driver.find_element(By.XPATH, "//div[@id='create']//input")
方案2:通过JavaScript替换当前页面内容

如果已经打开了空白页面(比如先访问about:blank),可以通过执行JS代码来替换整个页面的HTML结构:

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()
driver.get('about:blank')  # 先打开一个空白页面

with open('my_file.html', 'r', encoding='utf-8') as f:
    html_content = f.read()

# 用更安全的参数传递方式执行JS,避免手动转义特殊字符
driver.execute_script("document.documentElement.innerHTML = arguments[0];", html_content)

# 执行元素定位
target_element = driver.find_element(By.XPATH, "//div[@id='create']//input")

小提示:如果手动拼接JS字符串,需要处理HTML里的单引号、反斜杠等特殊字符,用arguments[0]传递参数的方式完全规避了这个问题,更推荐使用。

方案3:直接加载本地文件的file://URL

如果你的HTML文件有明确的本地路径,可以直接用file://协议来加载,这种方式和正常访问网页的行为几乎一致:

from selenium import webdriver
from selenium.webdriver.common.by import By
import os

driver = webdriver.Firefox()

# 获取文件的绝对路径(避免相对路径的问题)
file_abs_path = os.path.abspath('my_file.html')
# 转换成file://格式的URL
local_file_url = f'file://{file_abs_path}'

driver.get(local_file_url)

# 执行元素定位
target_element = driver.find_element(By.XPATH, "//div[@id='create']//input")

这几种方案都能满足你的需求,其中方案1和方案3的兼容性更好,也更接近浏览器正常加载页面的逻辑,优先推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:55:49