我有用户使用WKWebView
登录到网站,之后我想解析页面的HTML
。我对Swift
/ iOS Development
非常陌生(只是在学习过程中学习事物)。我知道HTML标记的id
,我正在尝试获取innerHTML
(id为“ dataGrid”),并将字符串存储在名为htmlString
的变量中。我有以下代码:
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)中描述的方法。在其中,完成处理程序具有一个print语句,该语句实际上可用于打印HTML
。但是,我不太了解完成处理程序,考虑到我对Swift
的使用经验还不多,这很有意义,但是这也意味着我不知道该如何修改我的帖子中的代码自己的目的。如果有人可以引导我朝正确的方向前进,以便我可以将页面的HTML
作为string
存储在一个变量中,以便以后进行更改,我将非常感激。谢谢!
答案 0 :(得分:2)
htmlString的值为“初始值”,因为该块是在执行print语句后执行的!
如果确实在块内打印htmlString,则可以看到实际值。您必须在完成模块中完成任务。另外,完成代码块还将在主线程中执行,因此您需要确保不阻塞主线程。