我需要在所有javascripts运行之后获取html。我使用WebKit.NET,问题是WebKitBrowser.StringByEvaluatingJavaScriptFromString即使使用简单的alert()也不会返回任何内容。当我通过" document.getElementsByTagName(' HTML')[0] .outerHTML" (它实际上是我需要得到的)作为它抛出System.AccessViolationException的参数(试图读取或写入受保护的内存)。当然,我确实在坚持使用DocumentCompleted委托的函数中调用了StringByEvaluatingJavaScriptFromString。我试图在objective-c中使用相同的函数StringByEvaluatingJavaScriptFromString并使用相同的参数" document来对WebView执行相同的操作。的getElementsByTagName(' HTML')[0] .outerHTML"它的效果很好,而且它与#34; document.getElementsByTagName(' html')[0] .outHTML"在浏览器的控制台中。请帮助或者给出替代方案如何在runnig all javascripts之后获得完整的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");
}
答案 0 :(得分:1)
我所做的是将webKitBrowser1.StringByEvaluatingJavaScriptFromString
与webKitBrowser1.Document.InvokeScriptMethod
整合:
所以你有这个:
webKitBrowser1.StringByEvaluatingJavaScriptFromString("function GetElement() {document.getElementsByTagName('html')[0].outerHTML};")
var returnvalue = (string) webKitBrowser1.Document.InvokeScriptMethod("GetElement");
其中带有对象字符串的代码中的返回值为returnvalue
(当然您可以更改它)
答案 1 :(得分:0)
我也遇到了这个错误,我尝试将html更改为正文:
document.getElementsByTagName('body')[0].outerHTML

然后它奏效了。