我使用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(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());

Swift相关问答推荐

SwiftData:线程1:&Quot;NSFetchRequest找不到实体名称';提醒&q;的NSEntityDescription

按SWIFT中每个ID的最大值进行筛选/排序

如何在macOS中延迟退出应用程序的退出操作?

TimeZone 背后的目的

我如何在 swift 中的 viewdidload 之前进行委托?

CardStack 和 Lottie

需要将 json 映射到 Swift 中的模型

为 SwiftUI 中的属性提供默认值

类型 '()' 不能符合 View (除非它肯定是 View,这次没有恶作剧)

任何使 ScrollView 像 List 一样执行更灵活的修饰符?

如何根据 SwiftUI 中的字体大小定义按钮的大小?

如何让 UIKit 挤压你的视图,使其适合屏幕

如何有条件地格式化 SwiftUI 代码

subscribeOn 和 observeOn 的顺序重要吗?

自动布局:获取 UIImageView 高度以正确计算单元格高度

在 Swift 中以编程方式更新约束的常量属性?

强制打开已在同一行代码中 Select 性访问的变量是否安全?

Swift 2.0 按属性对对象数组进行排序

如何将 Int 拆分为其各个数字?

使用 swift IOS 使 UIBarButtonItem 消失