Веб-текстовый граббер в Swift - PullRequest
0 голосов
/ 28 апреля 2020

Я пытался получить текстовое содержимое любой веб-страницы с помощью:

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 для доступа к любому веб-сайту: twitter, facebook, linkedin, quora, amazon et c. Очевидно, что представления WKWebView знают, как отображать и печатать их текст, поэтому я попытался получить текстовое содержимое из WKWebView:

(1) К сожалению, следующий метод всегда возвращает "", хотя я вызываю его из webView ( _ webView: WKWebView, didFini sh навигация: WKNavigation!):

func getTextContentFromWebView () -> String {
    var content = ""
    myWKWebView.evaluateJavaScript("document.documentElement") { (string, error) in
        if string != nil {
            content = string as! String
        }
    }
    return content
}

Я пробовал варианты этого кода, опубликованные в сети, такие как «document.body.textContent», «document.body». innerText "," document.body.outer HTML "," document.body.inner HTML ", но этот метод всегда возвращает" "...

(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), то должен быть общий c easy и д ocumented способ получить текст из WKWebView, не должно быть?

...