在c#桌面程序中, 如果得到html中内嵌js脚本执行的结果? 用.net的脚本引擎能得到吗?  它好像只能执行js代码, 如果里面涉及html元素是不是就不行了请问有什么现成的库吗?

解决方案 »

  1.   

    那要看你想得到什么了?JS脚本中有脚本将结果输出到外部程序.
    对使用webBrowse的WINFROM程序来说,就是用脚本给WINFROM发消息,WIN程序处理这消息就可以.
    如果是要外部程序监视脚本执行,那就麻烦点了.可以通过注入脚本短,把脚本覆盖或者转向,然后你处理完再去执行原脚本要继续执行的东西.以下是可供你参考的部分代码
    组件对象模型 (COM) 必须能够访问脚本对象。将 ComVisibleAttribute 属性添加到窗体类中。
     
    webBrowser1.ObjectForScripting = this;
    public void Test(String message)
    {
        MessageBox.Show(message, "client code");
    }
    <button onclick="window.external.Test('called from script code')">
        call client code from script code
    </button>
    还有
    webBrowser1.Document.InvokeScript("test",
        new String[] { "called from client code" }); 
      

  2.   

    webBrowser控件可以得到
    也可以把HTML看做是文本,然后从中读出想要的数据,还有一种就是JS是别外单独的文件,如果你网页已经可以看了你可以在临时文件里面把它复制出来。
      

  3.   

    把Response获取到,然后提取出js代码,再使用 Eval 函数
      

  4.   

    to fengyecsdn : 谢谢兄弟, 不过我是想得到结果运行后的结果, 而不是去调用某个脚本. 
    to JunsGo : 我们从 webBrowser 只能得到静态的源文件, 而不是脚本运行后的. (某些脚本运行后, 源文件可能会改变.)
    to syeerzy : 我想过提取JS, 然后用.net的脚本引擎去动态解释, 不过因为源文件中的脚本极有可能是操作里面的某些HTML元素, 如果我们用脚本引擎去解释时, 应该会提示找不到对象的. 
    to hdt: 能详细指明一下吗?我感觉应该需要一个可以解释HMTL, JS, VSCRIPT等混合内容的引擎, 这样便可以得到JS运行后的HTML源文件. 就是不知道有没有这样的引擎库可以用?
      

  5.   

      private void wb1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                foreach (System.Windows.Forms.HtmlElement he in wb1.Document.All)
                {
                    System.Diagnostics.Trace.WriteLine(he.TagName);
                }
            }
      

  6.   

    to hdt : 兄弟, 这样得到的还是运行前的源文件..  你可以拿下面的URL试试, 如果脚本运行后, 某些标签里有值, 例如"公司名称", 就是脚本在客户端动态赋予的.http://jobs.chinahr.com/html/2007-10/06/20051026015402001587.htm
      

  7.   

    sorry 取document的时机不对,不能再documentcomplete事件里去,try 等叶面加载完毕后,
      

  8.   

    //项目中添加Micrsoft.mshtml引用
    --c:\temp\temp.htm--
    <html>
    <script language="JavaScript">
    var Temp = "Zswang 路过 :)";
    </script>
    </html>
    using mshtml;private void Form1_Load(object sender, EventArgs e)
    {
        webBrowser1.Navigate(@"c:\temp\temp.htm");
    }private void button1_Click(object sender, EventArgs e)
    {
        IHTMLDocument2 vDocument = webBrowser1.Document.DomDocument as IHTMLDocument2;
        IHTMLWindow2 vWindow = vDocument.parentWindow;
        vWindow.execScript("document.title=Temp;", "JavaScript");
        Text = vDocument.title;
    }
      

  9.   

    如果你是想获取元素的值,何不在WebBrowser的DocumentCompleted事件中去取:比如:取"公司规模"的值
    WebBrowser.Document.GetElementById("lblCompanySize").OuterText
      

  10.   

    lz问题解决了? 我想知道方法我在阐述一次问题 比如sina blog的文章 你给出地址
    得到的是带复杂javascript的html源码
    而其中文章内容部分是显示 “博文载入中...”现在想得到的是html页面经过执行javascript后 得到的有博文具体内容的html源码