从Swift中的WKWebview获取HTML

Mot*_*oxX 35 swift wkwebview

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

谢谢你的帮助!

Ona*_*ato 79

如果您等到页面已加载,您可以使用:

webView.evaluateJavaScript("document.documentElement.outerHTML.toString()", 
                           completionHandler: { (html: Any?, error: Error?) in
    print(html)
})
Run Code Online (Sandbox Code Playgroud)

您还可以注入一些返回HTML的javascript.

let script = WKUserScript(source: javascriptString, injectionTime: injectionTime, forMainFrameOnly: true)
userContentController.addUserScript(script)
self.webView.configuration.userContentController.addScriptMessageHandler(self, name: "didGetHTML")

…

func userContentController(userContentController: WKUserContentController,
        didReceiveScriptMessage message: WKScriptMessage) {

        if message.name == "didGetHTML" {
            if let html = message.body as? String {
                print(html)
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

你可以注入的javascript看起来像:

webkit.messageHandlers.didGetHTML.postMessage(document.documentElement.outerHTML.toString());
Run Code Online (Sandbox Code Playgroud)


yoA*_*ex5 9

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
})
Run Code Online (Sandbox Code Playgroud)

将 HTML 设置为 WKWebView

//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
}
Run Code Online (Sandbox Code Playgroud)

[从 UIWebView 获取/设置 HTML]