问题描述
您好,Swift开发人员!。
我是快速编程的新手,几乎不需要帮助。
我正在开发一个非常简单的应用程序,该应用程序应该仅使用WkWebView
并自动填充加载其页面上的发货单来加载网络。
我已成功设法在webView(WkWebView
)中获取页面。
首先,它加载了该网址https://www.adidas.com/us,在选择要放入购物车中的商品后,它会到达该交付页面https://www.adidas.com/us/delivery,在这里我们必须填写this表格。在此之前,不需要登录信息。
我正在尝试同时使用UIWebView
和WkWebView
来完成此操作,但无济于事,这是我的代码,UIWebView
部分已注释。
class ViewController: UIViewController,WKUIDelegate {
@IBOutlet weak var uiWebView: UIWebView!
var webView: WKWebView!
let url: String = "https://www.adidas.com/us/delivery"
let defaults = UserDefaults.standard
override func viewDidLoad() {
super.viewDidLoad()
//WKWebView programatically so it can run below iOS 11
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero,configuration: webConfiguration)
webView.uiDelegate = self
view = webView
if let safeUrl = URL(string: url){
let request = URLRequest(url: safeUrl)
webView.load(request)
}
// uiWebView.loadRequest(NSURLRequest(url: NSURL(string: url)! as URL) as URLRequest)
// let result = uiWebView.stringByEvaluatingJavaScript(from: "document.title")
// print("result is: \(result!)")
self.webView.evaluateJavaScript("document.getElementById('di-id-cab9a55c-9d253ce3').value = 'Hello'") { (result,error) in
print(result) //This will Print Hello
}
}
// func webViewDidFinishLoad(_ webView: UIWebView) {
//
// let email = defaults.string(forKey: "EMAIL")
// let password = defaults.string(forKey: "Pass")
//
// let fillForm = "document.getElementById('f_707d6a95-3ef9-4b76-a162-9361b4ef7d4d').value = \(password)"
// webView.stringByEvaluatingJavaScript(from: fillForm)
// }
}
还有Here's First Name
字段的inspect元素的屏幕截图。
在此之后,我将使用用户默认值来自动填充数据。那一步我知道该怎么做才卡在这里!
请问我有什么有用的代码段或建议吗?我真的被困在这一点上! 预先感谢
解决方法
首先:停止使用UIWebView
,因为它已从一侧弃用,并从2020年12月开始停止由AppStore支持。
在加载页面时,您应该将navigationDelegate
设置为WKWebView并将值设置为webView(_ webView: WKWebView,didFinish navigation: WKNavigation!)
上的字段,例如:
override func viewDidLoad() {
super.viewDidLoad()
...
webView?.navigationDelegate = self
...
}
extension ViewController : WKNavigationDelegate {
func webView(_ webView: WKWebView,didFinish navigation: WKNavigation!) {
// Set a delay for dynamic pages
//DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
let fillForm = "document.getElementsByName('firstName')[0].value = 'My Name'"
webView.evaluateJavaScript(fillForm,completionHandler: nil)
//}
}