【问题标题】:Web Text Grabber in SwiftSwift 中的 Web 文本抓取器
【发布时间】:2020-04-28 14:04:33
【问题描述】:

我一直在尝试通过以下方式获取任何网页的文本内容:

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 中获取文本,应该'不是吗?

【问题讨论】:

  • 在页面加载完成之前你是否打电话给evaluateJavaScript
  • 否:我使用 func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) 来启用“fetchButton”;仅当启用此按钮时,我单击它并运行方法 getTextContentFromWebView()... 始终返回“”

标签: swift wkwebview webgrabber


【解决方案1】:

我想通了:

  • 我在第一个问题中的错误是 myWKWebView.evaluateJavaScript 是一个异步函数,即它立即返回 content=""(没有任何时间设置此变量)。解决方法是在方法内部处理变量“content”的内容。

  • WKwebViews 接受 copy() 方法但不实现它:由开发人员来实现它。我在某处读到它是通过接口 javascript-swift 完成的...

无论如何,第一个解决方案对我有用。

【讨论】:

    猜你喜欢
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2020-12-29
    • 1970-01-01
    • 2017-11-23
    • 2016-11-11
    相关资源
    最近更新 更多