使用EvaluateJavascript从WKWebView抓取HTML,然后将其存储在变量中(使用Swift)

时间:2018-09-02 01:44:36

标签: ios swift parsing wkwebview completionhandler

我有用户使用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存储在一个变量中,以便以后进行更改,我将非常感激。谢谢!

1 个答案:

答案 0 :(得分:2)

htmlString的值为“初始值”,因为该块是在执行print语句后执行的!

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