ios - 使用 evaluateJavascript 从 WKWebView 获取 HTML,然后将其存储在变量中(使用 Swift)

标签 ios swift parsing wkwebview completionhandler

我有用户使用 WKWebView 登录网站,之后我想解析页面的 HTML。我对 Swift/iOS Development 非常陌生(只是边学边做)。我知道 HTML 标记的 id 我正在尝试获取 innerHTML (id 是“dataGrid”)并想将字符串存储在一个名为 html 字符串。我有以下代码:

var htmlString = "initial value"
webView.evaluateJavaScript("document.getElementById('dataGrid').innerHTML.toString()", 
    completionHandler: { (html: Any?, error: Error?) in htmlString = html as! String})
print(htmlString)

显然这行不通 - 最后一个 print 语句只打印“初始值”。如您所知,我的代码基于另一篇 StackOverflow 帖子 (Get HTML from WKWebview in Swift) 中描述的方法。其中,完成处理程序有一个打印语句,它实际上用于打印 HTML。但是,我不太了解完成处理程序,考虑到我还没有太多 Swift 经验,这是有道理的,但这也意味着我不知道如何调整代码为我自己的目的发帖。如果有人能指导我正确的方向,我将不胜感激,这样我就可以将页面的 HTML 作为 string 存储在一个变量中,以后我可以对其进行修改。谢谢!

最佳答案

htmlString 的值为“初始值”,因为该 block 是在打印语句执行完之后执行的!

如果您在 block 内打印 htmlString,您可以看到实际值。您必须在完成 block 内完成您的任务。此外,完成 block 将在主线程中执行,因此您需要确保不会阻塞主线程。

关于ios - 使用 evaluateJavascript 从 WKWebView 获取 HTML,然后将其存储在变量中(使用 Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52133374/

相关文章:

ios - iOS 中 ARKit2.0 扫描和检测 3D 物体有哪些限制?

xml - Golang : Read single XML document from net.康恩

c++ - Solaris 配置文件解析器

java - 表达式前面的减操作数

ios - 如何在 swift 上制作这样的 firebase 列表

ios - iOS 中的 Google Drive API downloadUrl 404

swift - 如何在 Xcode 11 中以编程方式创建 UI?

ios - 如何在 Realm 数据库中构建模型&我可以使用日期作为主键吗?

ios - tableView 上的 UIPanGestureRecognizer 不会滚动表格项目

swift - 如何创建 CMVideoFormatDescription 对象