我一直在尝试通过以下方式获取任何网页的文本内容:
func getTextContentFromUrl (url: URL) -> String? {
var content = ""
do {
content = try String(contentsOf: url)
} catch {
return nil
}
return content
}
如果网页包含 html/body 标记内的文本,它可以正常工作,但如果网页仅包含 javascript,则不会,例如:https ://twitter.com/search?q=tesla&src=typed_query
我知道 Swifter,但我无法编写数百个 API 来访问任何 WEB 站点:twitter、facebook、linkedin、quora、amazon 等。显然,WKWebView 视图知道如何显示和打印它们的文本,因此我试图获取文本来自 WKWebView 的内容:
(1) 不幸的是,即使我从 webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) 调用它,以下方法总是返回“”:
func getTextContentFromWebView () -> String {
var content = ""
myWKWebView.evaluateJavaScript("document.documentElement") { (string, error) in
if string != nil {
content = string as! String
}
}
return content
}
我尝试了在 WEB 上发布的这段代码的变体,例如“document.body.textContent”、“document.body.innerText”、“document.body.outerHTML”、“document.body.innerHTML”,但是这个方法总是返回“”……
(2) 我也尝试使用剪贴板来获取文本内容(myWKWebView.SelectAll()、myWWKWebView.copy()),但是 myWKWebView.copy() 总是发送异常(即使这个方法应该适用于任何 NSView,如 Apple 的文档所述):
2020-03-13 15:21:26.251341+0100 Text Miner[7313:603242] -[WKWebView copyWithZone:]: unrecognized selector sent to instance 0x101b815c0
如果任何人都可以通过任何网络浏览器手动复制和粘贴和打印任何网页的文本内容,而不管其内容如何(html/javascript),那么应该有一种通用的简单且有记录的方法来从 WKWebView 中获取文本,不应该吗?