【问题标题】:WebKitBrowser.StringByEvaluatingJavaScriptFromString returns no valueWebKitBrowser.StringByEvaluatingJavaScriptFromString 不返回任何值
【发布时间】:2015-05-20 05:44:48
【问题描述】:

我需要在所有 javascript 运行后获取 html。我使用 WebKit.NET,问题是 WebKitBrowser.StringByEvaluatingJavaScriptFromString 即使使用简单的 alert() 也不会返回任何内容。当我通过“document.getElementsByTagName(' html')[0].outerHTML"(它实际上是我需要得到的)作为它抛出 System.AccessViolationException(试图读取或写入受保护的内存)的参数。当然,我确实在坚持 DocumentCompleted 委托的函数中调用 StringByEvaluatingJavaScriptFromString。我尝试使用相同的函数 StringByEvaluatingJavaScriptFromString 和相同的参数“document.getElementsByTagName('html' )[0].outerHTML" 并且它与浏览器控制台中的 "document.getElementsByTagName('html')[0].outerHTML" 一起工作得很好。请帮助或提供替代方案,在运行所有 javascript 之后如何获得整个 html。

public Form1()
    {
        InitializeComponent();          
        webKitBrowser1.Navigate("http://famous-design.ru/stoly/");

        webKitBrowser1.DocumentCompleted += webKitBrowser1_DocumentCompleted;

    }


    void webKitBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {

        string str = webKitBrowser1.StringByEvaluatingJavaScriptFromString("document.getElementsByTagName('html')[0].outerHTML");

    }    

【问题讨论】:

  • 为什么使用:document.getElementsByTagName("html")[0] 当你可以使用:document.documentElement

标签: javascript c# html


【解决方案1】:

我所做的是将webKitBrowser1.StringByEvaluatingJavaScriptFromStringwebKitBrowser1.Document.InvokeScriptMethod 整合在一起:

所以你有这个:

webKitBrowser1.StringByEvaluatingJavaScriptFromString("function GetElement() {document.getElementsByTagName('html')[0].outerHTML};")
var returnvalue = (string) webKitBrowser1.Document.InvokeScriptMethod("GetElement");

在带有对象字符串的代码中返回值为returnvalue(当然可以改)

【讨论】:

    【解决方案2】:

    我也遇到了这个错误,我尝试将 html 更改为这样的正文:

    document.getElementsByTagName('body')[0].outerHTML

    然后它起作用了。

    【讨论】:

      猜你喜欢
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      • 2019-05-22
      • 2014-09-22
      相关资源
      最近更新 更多