Получение снимка области внутри WKWebView - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь получить снимок капчи, присутствующей на веб-сайте, чтобы я мог попросить своих пользователей ввести ее в другом пользовательском интерфейсе.https://www.camsonline.com/InvestorServices/COL_ISAccountStatement.aspx Я нашел фрейм капчи с помощью

document.getElementById('captchImg').getBoundingClientRect();

Но этот фрейм относится к веб-представлению, а не к окну iOS.Я пытался конвертировать, используя

webview.convert(CGRect(x: 685, y: 1063), to: self.view)

, но, похоже, это не сработало.Я просто хочу изображение из снимка капчи.Что я делаю?Я перепробовал множество ответов на SO, но пока ничего не помогло.

1 Ответ

1 голос
/ 26 июня 2019

Я думаю, что вы можете сохранить кэшированное изображение, используя кодировку base64, а затем преобразовать его в UIImage где угодно. Например, поместите его обратно в другой UIImageView.

Этот пример кода просто загружается в self.imageView, вы можете делать с ним все, что захотите.

   func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {

        let str = "var c = document.createElement('canvas'); var ctx = c.getContext('2d'); ctx.drawImage(document.getElementById('captchImg'), 100, 40); var value = c.toDataURL(); value.split(',')[1]; "

        self.webView.evaluateJavaScript(str) { (value, error) in
             if error == nil {
                 if let img = value as? String {
                      self.imageView.image = self.base64ToImage(base64: img)
                 }
             }
         }
    }

    func base64ToImage(base64: String) -> UIImage? {
        var img: UIImage = UIImage()
        if (!base64.isEmpty) {
            if let decodedData = NSData(base64Encoded: base64 , options: NSData.Base64DecodingOptions.ignoreUnknownCharacters) {
                if let decodedimage = UIImage(data: decodedData as Data) {
                    img = (decodedimage as UIImage?)!
                    return img
                }
            }
        }
        return nil
    }
...