Получите HTML из WKWebview в Swift

Я вхожу на веб-сайт с помощью WKWebView, и теперь я хочу проанализировать HTML-код веб-сайта. Как я могу быстро получить доступ к веб-сайтам html? Я знаю, как это работает для UIWebView, но не для WKWebView.

Спасибо за вашу помощь!


person MotoxX    schedule 12.01.2016    source источник


Ответы (2)


Если вы подождете, пока страница загрузится, вы можете использовать:

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

Вы также можете ввести некоторый javascript, который вернет вам HTML.

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());
person Onato    schedule 13.01.2016
comment
после изменения cssRule внутри internal- ‹style› веб-просмотр отображается так, как я изменил. но document.documentElement.outerHTML.toString () не получает новое cssRule. какое решение у вас есть? - person Kyle KIM; 21.06.2016
comment
@Onato Как загрузить обратно что схваченный html? - person onCompletion; 12.12.2016
comment
Моя интерпретация этого вопроса такова: как я могу получить HTML-код с веб-страницы, чтобы я мог перезагрузить его, и он работал ТОЧНО одинаково. Этот принятый ответ НЕ отвечает на этот вопрос. По крайней мере, в моем приложении тестирование не обнаруживает интерактивных ссылок, несмотря на то, что страница отображается правильно. В настоящее время у меня нет информации о том, как сохранить HTML и перезагрузить его, чтобы страница была такой, какая была. Возможно, использовать String (contentsOf: url) для получения HTML и попробовать его таким образом, а не загружать через сам wkWebView? - person drew..; 17.05.2018
comment
Я бы посоветовал опубликовать новый вопрос с более подробной информацией о цели, которую вы пытаетесь достичь. Не стесняйтесь ссылаться на это здесь. - person Onato; 30.05.2018

WKWebView

получить 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
})

установить 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
}

[получить / установить HTML из UIWebView]

person yoAlex5    schedule 17.07.2019