我正在尝试获取网站上存在的验证码快照,以便可以要求我的用户在其他UI中键入该验证码。 https://www.camsonline.com/InvestorServices/COL_ISAccountStatement.aspx 我使用
找到了验证码的框架document.getElementById('captchImg').getBoundingClientRect();
但是此框架是参考Web视图而不是iOS窗口。我确实尝试使用
进行转换webview.convert(CGRect(x: 685, y: 1063), to: self.view)
但这似乎并不能解决问题。我只想要来自验证码快照的图像。我该怎么办?我在SO上尝试了许多答案,但到目前为止没有任何帮助。
答案 0 :(得分:1)
我认为您可以使用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
}