首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Swift中从WKWebview获取超文本标记语言

在Swift中从WKWebview获取超文本标记语言
EN

Stack Overflow用户
提问于 2016-01-13 03:07:51
回答 4查看 43.5K关注 0票数 59

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

谢谢你的帮忙!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-01-13 13:32:54

如果您一直等到页面加载完毕,您可以使用:

代码语言:javascript
复制
webView.evaluateJavaScript("document.documentElement.outerHTML.toString()", 
                           completionHandler: { (html: Any?, error: Error?) in
    print(html)
})

你也可以注入一些返回HTML的javascript。

代码语言: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看起来像这样:

代码语言:javascript
复制
webkit.messageHandlers.didGetHTML.postMessage(document.documentElement.outerHTML.toString());
票数 112
EN

Stack Overflow用户

发布于 2019-07-18 03:36:26

WKWebView

从WKWebView获取超文本标记语言

代码语言:javascript
复制
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
})

将超文本标记语言设置为WKWebView

代码语言:javascript
复制
//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
}

[get/set HTML from UIWebView]

票数 9
EN

Stack Overflow用户

发布于 2021-08-05 18:05:59

在询问token form的新APIS后,我在这里尝试获取有关获取结果的线索。(我正在实现他们的流,而不是他们的SDK的所有东西) Hope可以帮助别人。

现在Dropbox使用一个网页作为登录,并回调你的url,在那里你可以处理token。

代码语言:javascript
复制
import WebKit
import SwiftUI

// some code from:
// https://benoitpasquier.com/create-webview-in-swiftui/
// THX pasquier!

let APP_KEY = "YOUR APP KEY"
let REDIRECT_URI = "<YOUR SITE>.dropbox_auth.php"
let DB_URL = "https://www.dropbox.com/1/oauth2/authorize?client_id=APP_KEY&token_access_type=offline&response_type=code&redirect_uri=REDIRECT_URI"

class MyWKDelegate: NSObject, WKNavigationDelegate{
    
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        print("End loading")
        webView.evaluateJavaScript("document.body.innerHTML", completionHandler: { result, error in
            
            if let html = result as? String {
                    print(html)
                }
            })
    }
}

struct WebView: UIViewRepresentable {
        
    typealias UIViewType = WKWebView

    let webView: WKWebView
    
    func makeUIView(context: Context) -> WKWebView {
        return webView
    }
    
    func updateUIView(_ uiView: WKWebView, context: Context) { }
}


class WebViewModel: ObservableObject {
    let webView: WKWebView
    let url: URL!
    let delegate = MyWKDelegate()
    
    init() {
        webView = WKWebView(frame: .zero)
        webView.navigationDelegate = delegate

        let urlStr = DB_URL.replacingOccurrences(of: "APP_KEY", with: APP_KEY).replacingOccurrences(of: "REDIRECT_URI", with: REDIRECT_URI)
        print(urlStr)
        url = URL(string: urlStr)

        loadUrl()
    }
    
    func loadUrl() {
        webView.load(URLRequest(url: url))
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34751860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档