使用 evaluateJavascript 从 WKWebView 获取 HTML,然后将其存储在变量中(使用 Swift)
Posted
技术标签:
【中文标题】使用 evaluateJavascript 从 WKWebView 获取 HTML,然后将其存储在变量中(使用 Swift)【英文标题】:Grab HTML from WKWebView using evaluateJavascript and then store it in a variable (using Swift) 【发布时间】:2018-09-02 01:44:35 【问题描述】:我让用户使用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
语句只打印“初始值”。请注意,我的代码基于另一个 *** 帖子 (Get HTML from WKWebview in Swift) 中描述的方法。在一个中,完成处理程序有一个打印语句,它实际上用于打印HTML
。但是,我不太了解完成处理程序,考虑到我还没有太多使用 Swift
的经验,这是有道理的,但这也意味着我不知道如何根据自己的目的调整该帖子中的代码.如果有人能指引我正确的方向,我将不胜感激,这样我就可以将页面的HTML
存储为string
一个变量,以便以后进行变异。谢谢!
【问题讨论】:
您引用的代码对完成处理程序进行了打印调用。你为什么把它移出完成处理程序?询问是因为这正是导致您的代码无法按预期工作的原因。 我只是想在之后看看 htmlString 的值。我的最终目标是从 HTML 中提取信息。 然后将打印保存在完成处理程序中。并在那里添加处理。 【参考方案1】:htmlString 的值是“初始值”,因为块是在 print 语句被执行之后执行的!
如果您在块内打印 htmlString,您可以看到实际值。您必须在完成块内完成您的任务。此外,完成块将在主线程中执行,因此您需要确保不会阻塞主线程。
【讨论】:
谢谢!!!!所以本质上我需要解析 HTML 并在完成处理程序本身中提取我想要的数据? 是的!你说的对!如果您觉得答案有帮助,请点赞并接受它作为答案。 @ShardulJoshi - 能否请您也投票(通过单击 ^),以便其他人会发现此答案更有帮助。 我确实投了赞成票,但我没有足够的声誉让它公开出现 哦!我明白了,没关系!感谢您的努力!以上是关于使用 evaluateJavascript 从 WKWebView 获取 HTML,然后将其存储在变量中(使用 Swift)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用evaluateJavaScript 将数据从WKWebview 发送到HTML 文件| iOS | Objective-C
使用 evaluateJavascript 处理来自 Android WebView 的 Promise
WKWebView evaluateJavaScript 不返回 html