使用 evaluateJavascript 从 WKWebView 抓取 HTML,然后将其存储在变量中(使用 Swift)
Grab HTML from WKWebView using evaluateJavascript and then store it in a variable (using Swift)
我有用户使用 WKWebView
登录网站,之后我想解析页面的 HTML
。我对 Swift
/iOS Development
非常陌生(只是边学边学)。我知道 HTML 标签的 id
我正在尝试获取(id 是 "dataGrid")的 innerHTML
并且想将字符串存储在一个名为 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
语句只打印 "initial value"。正如您所知,我的代码基于另一个 Whosebug post () 中描述的方法。其中,完成处理程序有一个打印语句,它实际上用于打印 HTML
。但是,我不太了解完成处理程序,考虑到我还没有太多使用 Swift
的经验,这是有道理的,但这也意味着我不知道如何调整 [=33] 中的代码=] 为了我自己的目的。如果有人能指导我正确的方向,我将非常感激,这样我就可以将页面的 HTML
作为 string
存储在一个变量中,以后我可以对其进行修改。谢谢!
htmlString 的值为"initial value",因为该块是在打印语句执行后执行的!
如果您在块内打印 htmlString,您可以看到实际值。您必须在完成块内完成您的任务。此外,完成块将在主线程中执行,因此您需要确保不阻塞主线程。
我有用户使用 WKWebView
登录网站,之后我想解析页面的 HTML
。我对 Swift
/iOS Development
非常陌生(只是边学边学)。我知道 HTML 标签的 id
我正在尝试获取(id 是 "dataGrid")的 innerHTML
并且想将字符串存储在一个名为 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
语句只打印 "initial value"。正如您所知,我的代码基于另一个 Whosebug post (HTML
。但是,我不太了解完成处理程序,考虑到我还没有太多使用 Swift
的经验,这是有道理的,但这也意味着我不知道如何调整 [=33] 中的代码=] 为了我自己的目的。如果有人能指导我正确的方向,我将非常感激,这样我就可以将页面的 HTML
作为 string
存储在一个变量中,以后我可以对其进行修改。谢谢!
htmlString 的值为"initial value",因为该块是在打印语句执行后执行的!
如果您在块内打印 htmlString,您可以看到实际值。您必须在完成块内完成您的任务。此外,完成块将在主线程中执行,因此您需要确保不阻塞主线程。