我有用户使用 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/