ios – 在UIWebView中自动填充用户名和密码
我正在为我做一个非常简单的应用程序.当我启动这个应用程序时,它只是带我到这个网页
https://social.tre.it/expert.
我想自动登录,所以有没有办法自动填写用户名和密码,检查“我接受条件”标记并按“登录”按钮? 我尝试了这个Autofill Username and Password UIWebView Swift,但它不起作用,我不是页面的创建者所以我不确切知道它是如何构造的. 即使iCloud钥匙链填写表格也会很酷……但也许我问的太多了! 解决方法
您可以使用JavaScript来执行此操作.
如果您检查页面,您可以很容易地发现文本输入字段的ID(expert_email和expert_password)并执行一些JS代码来填充它们. 实现UIWebView委托的webViewDidFinishLoad方法,如下所示: Objective-C的: - (void)webViewDidFinishLoad:(UIWebView *)webView { //fill data NSString *email = @"myemail@email.com"; NSString *password = @"mypassword"; NSString *fillDataJsCall = [NSString stringWithFormat:@"document.getElementById('expert_email').value = '%@';document.getElementById('expert_password').value = '%@';",email,password]; [webView stringByEvaluatingJavaScriptFromString:fillDataJsCall]; //check checkboxes [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('expert_remember_me').checked = true; document.getElementById('expert_terms_of_service').checked = true;"]; //submit form dispatch_after(dispatch_time(DISPATCH_TIME_NOW,1 * NSEC_PER_SEC),dispatch_get_main_queue(),^(void) { [webView stringByEvaluatingJavaScriptFromString:@"document.forms["new_expert"].submit();"]; }); } 迅速: func webViewDidFinishLoad(webView: UIWebView) { // fill data let savedUsername = "USERNAME" let savedPassword = "PASSWORD" let fillForm = String(format: "document.getElementById('expert_email').value = '(savedUsername)';document.getElementById('expert_password').value = '(savedPassword)';") webView.stringByEvaluatingJavaScriptFromString(fillForm) //check checkboxes webView.stringByEvaluatingJavaScriptFromString("document.getElementById('expert_remember_me').checked = true; document.getElementById('expert_terms_of_service').checked = true;") //submit form dispatch_after(dispatch_time(DISPATCH_TIME_NOW,Int64(1 * NSEC_PER_SEC)),dispatch_get_main_queue()){ webView.stringByEvaluatingJavaScriptFromString("document.forms["new_expert"].submit();") } } 这应该填写您的信息.但是,如果此网站将来更改其结构,则此代码很容易破解.当您处理自己的页面时,这种执行JS代码的方法更合理. 编辑: 我更新了代码以演示如何选中复选框以及如何提交表单. 一些说明: >当登录失败时,页面会重新加载,所以你最终会无休止地调用webViewDidFinishLoad,因为你试图反复提交,所以你可能想要添加一些逻辑来打破这个案件.这就是为什么我在提交之前提出延迟以便能够看到正在发生的事情.>除了前一点中的信息之外 – 在登录成功后(当重定向到下一页时),您将会收到对webViewDidFinishLoad的调用,因此您可能希望在加载不同页面时引发标志(执行登录)仅在登录页面上尝试). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |