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

如何用Python加载HTML文件并运行其中的JS函数获取返回值?

解决方法

问题根源

  1. js2py 默认未模拟浏览器DOM环境,直接运行包含 document 相关代码的HTML文件时,会因找不到 document 对象报错,导致代码无法正常执行。
  2. bigger 函数仅修改全局变量 result,没有返回值,直接调用 tt.bigger() 无法获取结果,需从全局作用域中读取 result。

实现方案

方案一:提取核心JS代码运行

直接剥离HTML中不需要的DOM相关代码,仅运行核心逻辑:

import js2py

# 提取HTML中script标签内的核心JS代码(移除DOM绑定部分)
core_js = """
var result = null;
function bigger(x, y) {
  result = 'font '+x+' got bigger by '+y;
  console.log(result)
}
"""

# 创建JS执行上下文并运行代码
js_context = js2py.EvalJs()
js_context.execute(core_js)

# 调用函数并获取全局变量结果
target_str = "Hello World"
target_size = 120
js_context.bigger(target_str, target_size)
final_result = js_context.result
print(final_result)  # 输出:font Hello World got bigger by 120

方案二:模拟DOM环境运行完整HTML

如果需要保留原HTML的完整代码,可模拟空DOM对象避免报错:

import js2py
from bs4 import BeautifulSoup

# 读取本地HTML文件
with open('c://file.htm', 'r', encoding='utf-8') as file:
    html_content = file.read()

# 提取script标签内的JS代码
soup = BeautifulSoup(html_content, 'html.parser')
raw_js = soup.find('script').string

# 添加模拟DOM的代码,避免document相关报错
mock_dom_code = """
var document = {
  getElementById: function() {
    return { onclick: function() {} };
  }
};
"""
full_js_code = mock_dom_code + raw_js

# 执行JS代码并调用函数
js_context = js2py.EvalJs()
js_context.execute(full_js_code)

target_str = "Hello World"
target_size = 120
js_context.bigger(target_str, target_size)
print(js_context.result)  # 输出预期结果

注意事项

  • 使用方案二需先安装BeautifulSoup4:pip install beautifulsoup4
  • 模拟DOM仅为避免代码执行报错,原HTML中的onclick绑定逻辑不会影响函数调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:05:21