ios - 获取 WKWebView 内区域的快照
问题描述
我正在尝试获取网站上存在的验证码的快照,以便我可以要求我的用户在不同的 UI 中键入它。https://www.camsonline.com/InvestorServices/COL_ISAccountStatement.aspx 我通过使用找到了验证码的框架
document.getElementById('captchImg').getBoundingClientRect();
但是这个框架是指 webview 而不是 iOS 窗口。我确实尝试使用转换
webview.convert(CGRect(x: 685, y: 1063), to: self.view)
但这似乎并没有奏效。我只想要验证码快照中的图像。我该怎么办?我已经尝试了很多关于 SO 的答案,但到目前为止没有任何帮助。
解决方案
我认为您可以使用 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
}
推荐阅读
- git - git clone lfs 文件未完全下载
- html - 结尾的内容拆分和不以大写开头的标题
- python - 有没有办法将对象转换为字节数组?
- r - 网页抓取时收到“需要 TRUE / FALSE 的缺失值”错误消息
- .net - 为什么不
是否可以更改 SDK 样式 csproj 文件中所有文件的复制属性? - powershell - PowerShell - 忽略文件名的测试路径
- session - 如何防止使用复制的会话 cookie
- c++ - 从 'int (*) (int)' 到 'int' 的无效转换
- ios - Firebase Firestore Codable 为零
- python - 如何在 Python Webbot/Selenium 中迭代子 webelements?