如何在 C# 中将 document.write javascript 评估为纯文本?我正在尝试对此进行评估:
<script type="text/javascript">
a=2;b=3;
document.write(a+"_"+y);
</script>
对此:
2_3
如何在 C# 中将 document.write javascript 评估为纯文本?我正在尝试对此进行评估:
<script type="text/javascript">
a=2;b=3;
document.write(a+"_"+y);
</script>
对此:
2_3
从您的评论中,“它是下载的 HTML 页面上的客户端功能”,听起来您正在执行某种屏幕抓取/抓取,而 HTML/JavaScript 没有向您的应用程序发出客户端请求?
如果我正确理解这就是您所寻求的,那么您需要一个可以“说”JavaScript 的解释器。C# 无法做到这一点,因此下一个最好的办法是在您的 C# 应用程序中启动一个能够理解/解释(并因此评估)JavaScript 的组件。
我建议查看 WebBrowser 控件和 HtmlDocument.DomDocument,将下载的 HTML 页面加载到 HtmlDocument / WebBrowser 控件中,它将运行并将 JavaScript 函数的结果包含在 HTML 中(因为 document.write 操作DOM 和生成的 HTML)。
如果您创建一个简单的表单应用程序并将 Web 浏览器控件拖到它上面,这是我刚刚编写的用于测试该理论的示例:
using System;
using System.Windows.Forms;
// Make sure to add COM reference to "Microsoft HTML Object Library"
namespace TheAnswer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Url = new Uri("about:blank");
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
MessageBox.Show("Loaded!");
string testHtml = @"
<html>
<head>
<script type=""text/javascript"">
var a=2;var b=3;
document.write(a+""_""+b);
</script>
</head>
<body>Hello there!</body>
</html>";
mshtml.IHTMLDocument2 htmlDoc = (mshtml.IHTMLDocument2)webBrowser1.Document.DomDocument; // IHTMLDocument2 has the write capability (IHTMLDocument3 does not)
htmlDoc.close();
htmlDoc.open("about:blank");
object html = testHtml;
htmlDoc.write(html);
html = null;
}
}
}
显然,从这里,您可以将“下载”的 HTML 插入 HTML 文档并执行它;如果您要处理多种不同类型的页面等,您可能会在此过程中遇到许多障碍;如果您总是在抓取类似类型的页面并且确定某些预期的行为或 javascript 功能,那么您可能能够取得一些结果。考虑到您提供的有关项目内容的最少信息,真的很难说更多。
我确实希望这会有所帮助,并且是您想要完成的。让我知道!
编辑:哇,我没有意识到这个问题已经 2 岁了!无论如何,回答它有一些乐趣!