在Swift中从WKWebview获取HTML

在Swift中从WKWebview获取HTML,swift,wkwebview,Swift,Wkwebview,我使用WKWebView登录到一个网站,现在我想解析该网站的html。如何在swift中访问网站html?我知道它如何适用于UIWebView,但不适用于WKWebView 谢谢你的帮助 如果等待页面加载完毕,则可以使用: webView.evaluateJavaScript("document.documentElement.outerHTML.toString()", completionHandler: { (html: Any?,

我使用WKWebView登录到一个网站,现在我想解析该网站的html。如何在swift中访问网站html?我知道它如何适用于UIWebView,但不适用于WKWebView


谢谢你的帮助

如果等待页面加载完毕,则可以使用:

webView.evaluateJavaScript("document.documentElement.outerHTML.toString()", 
                           completionHandler: { (html: Any?, error: Error?) in
    print(html)
})
您还可以注入一些javascript,返回HTML

let script=WKUserScript(源代码:javascriptString,injectionTime:injectionTime,formInframeOnly:true)
userContentController.addUserScript(脚本)
self.webView.configuration.userContentController.addScriptMessageHandler(self,名称:“didGetHTML”)
…
func userContentController(userContentController:WKUserContentController,
didReceiveScriptMessage消息:WKScriptMessage){
如果message.name==“didGetHTML”{
如果让html=message.body作为字符串{
打印(html)
}
}
}
可以注入的javascript类似于:

webkit.messageHandlers.didGetHTML.postMessage(document.documentElement.outerHTML.toString());
WKWebView 从WKWebView获取HTML

wkWebView.evaluateJavaScript("document.body.innerHTML", completionHandler: { (value: Any!, error: Error!) -> Void in

    if error != nil {
        //Error logic
        return
    }

    //let result = value as? String
    //Main logic
})
//Do not forget to extend a class from `WKNavigationDelegate`

func someFunction() {
    let wkWebView = WKWebView()

    wkWebView.loadHTMLString("<html><body></body></html>", baseURL: nil)
    wkWebView.navigationDelegate = self as? WKNavigationDelegate
}

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    //ready to be processed
}
将HTML设置为WKWebView

wkWebView.evaluateJavaScript("document.body.innerHTML", completionHandler: { (value: Any!, error: Error!) -> Void in

    if error != nil {
        //Error logic
        return
    }

    //let result = value as? String
    //Main logic
})
//Do not forget to extend a class from `WKNavigationDelegate`

func someFunction() {
    let wkWebView = WKWebView()

    wkWebView.loadHTMLString("<html><body></body></html>", baseURL: nil)
    wkWebView.navigationDelegate = self as? WKNavigationDelegate
}

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    //ready to be processed
}
//不要忘记从`WKNavigationDelegate'扩展类`
func someFunction(){
设wkWebView=wkWebView()
wkWebView.loadHTMLString(“,baseURL:nil)
wkWebView.navigationDelegate=作为?WKNavigationDelegate的自我
}
func webView(webView:WKWebView,didfish导航:WKNavigation!){
//准备好处理了吗
}


内部修改cssRule后,webview显示为“我已修改”。但是document.documentElement.outerHTML.toString()没有获得新的cssRule。你有什么解决方案吗?@Onato如何加载抓取的html?我对这个问题的解释是:如何从网页中获取html,这样我就可以重新加载它,并使其功能完全相同。这个被接受的答案并不能回答这个问题。至少在我的应用程序中,测试显示尽管页面显示正确,但没有可点击的链接。我目前还没有关于如何保存HTML并重新加载它以使页面保持原样的线索。也许是使用字符串(contentsOf:url)来获取HTML,并以这种方式尝试,而不是通过wkWebView本身加载?我建议发布一个新问题,包括您试图实现的目标的更多细节。请随意链接到这里。