web-dev-qa-db-ja.com

SwiftでWKWebviewからHTMLを取得

WKWebViewを使用してWebサイトにログインしましたが、Webサイトのhtmlを解析したいと思います。迅速にウェブサイトのhtmlにアクセスするにはどうすればよいですか? UIWebViewではどのように機能するかを知っていますが、WKWebViewでは機能しません。

ご協力いただきありがとうございます!

35
MotoxX

ページがロードされるまで待つ場合、次を使用できます。

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

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)
            }
        }
}

挿入できるjavascriptは次のようになります。

webkit.messageHandlers.didGetHTML.postMessage(document.documentElement.outerHTML.toString());
72
Onato

もう一つの例

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
})

IWebViewからHTMLを取得
HTMLをUIWebViewに挿入
HTMLをWKWebViewに挿入

0
yoAlex5