Ожидание сценариев в URLSession - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь разобрать эту статистику тенниса. Веб-сайт: https://www.ultimatetennisstatistics.com/playerProfile?playerId=3333#.

Когда я открываю страницу в Chrome и проверяю ее, появляется элемент div с классом : "row".

Когда я делаю Url Request в моем приложении Swift, вот так:

let task = URLSession.shared.dataTask(with: url) { (dat, response, err) in
            if let error = err{
                print(error)
            }else{
                guard let data = dat else {
                    return
                }
                if let htmlString = NSString(data: data, encoding: String.Encoding.utf8.rawValue) {
                    // continue to work with the html string here 
                }else{
                    print("Error no htmlString")
                }
            }
        }
        task.resume()

и распечатываю html в том месте, где я надеялся найти div с классом "row", вместо этого я получаю div с классом "loading".

Я думаю, это может быть потому, что скрипты на сайте еще не запущены. Как я могу это исправить и позволить скриптам запускаться и ждать их обратного вызова? Или как еще я могу решить эту проблему? Заранее спасибо.

1 Ответ

0 голосов
/ 09 марта 2020

Я решил эту проблему, загрузив ссылку в webView и извлекая html после небольшой задержки. Вот мой код:

let url = URL(string: "https://www.ultimatetennisstatistics.com/playerProfile?playerId=3333#")!
    let request = URLRequest(url: url)
    webview.load(request)
    DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
        self.webview.evaluateJavaScript("document.documentElement.outerHTML") { (was, err) in
            if let doc = was {
                print(doc)
            }else{
                print(err!)
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...