【问题标题】:how to run javascript from .NET code?如何从 .NET 代码运行 javascript?
【发布时间】:2011-02-08 15:27:01
【问题描述】:

我有一个 webrequest,它返回一个 html 响应,其中包含带有隐藏字段的表单,其中包含一些在页面加载时自动提交表单的 javascript(如果这是在浏览器中运行的)。

如果我将此文件保存为 *.html 并在浏览器中运行此文件,java 脚本代码会自动发布表单,输出为 excel 文件。

我希望能够从不在浏览器中运行的 c# 代码生成此文件(excel)。

我尝试模拟 thr form post,但它很复杂,并且基于原始 webrequest 查询字符串具有各种场景。任何指针....我知道不可能从 c# 代码中运行发布表单的 JS 代码,但如果有人这样做了,仍然会考虑检查。

【问题讨论】:

  • 你想在 C# 代码中生成文件吗? Excel 还是从 Web 请求返回的 HTML?
  • 当您说“我希望能够生成此文件...”时,您是指 HTML 文件还是 Excel 文件?
  • 不精确的语言在 SO 上不会长久存在! :)
  • @MusiGenesis - 我的意思是 excel 文件。

标签: c# javascript


【解决方案1】:

如果我正确理解您的问题,您在 Web 服务中有代码,该代码返回一个 HTML 文件,其中包含 javascript,该文件将表单发布到返回 Excel 电子表格的某个地方。我有这个权利吗?

当您的代码变成Rube Goldberg machine 时,您可能需要稍微重构一下。是否有任何原因无法编写您的原始 Web 请求以返回 Excel 电子表格(省去多个中间人)?

更新:抱歉,Rube Goldberg 破解 - 我想我现在了解你的情况了。

为此,我会远离WebBrowser,因为它更像是一个有趣但危险的玩具,而不是复杂机器中的可靠链接。

基本上,您在这里真正需要做的就是解析从初始 Web 请求返回的 HTML 并提取表单值,然后用代码构建您自己的表单并将其提交给返回 Excel 电子表格的 Web 服务。返回的 HTML 中的 javascript 实际上对您来说并不重要,因为它的唯一目的是从浏览器提交表单值。

Html Agility Pack 看起来是一个不错的选择(我自己从未使用过它,但它似乎是 StackOverflow 上此类问题最常见的答案)。

【讨论】:

  • 好问题 - 是的,原因是 webrequest 是针对以这种方式返回响应的供应商产品。
【解决方案2】:

如果您知道 javascript 代码(您知道,因为您可以访问 HTML),您可以分析它并找出将哪些值发布到返回 Excel 工作表的 Web 服务。当您知道这一点时,只需使用 C# 发布相同的值,您就会得到相同的工作表。 System.Net 命名空间可能会对您有所帮助,虽然我自己从未尝试过,所以我不确定。

【讨论】:

  • 考虑到了这一点,但运气不佳。字段的组合是动态的,因此需要进行运行时分析。
  • @dotnetcoder:不过,您可能可以使用正则表达式或其他方式在 html 文件中找到参数,然后自己进行发布,而不是找出运行 javascript 的方法。
【解决方案3】:

您可以使用 WebBrowser 控件与 IE 中的页面进行交互。

请注意,它会很慢。

【讨论】:

  • 我的 c# 代码在 Windows 服务中。我是否需要以任何可视形式打开 webbrowser 控件,或者只是它的实例才能工作?
  • 如果您在服务中运行,这将无法可靠地工作(但您仍然可以尝试)。祝你好运!
猜你喜欢
  • 2020-12-15
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多