我正在为我做一个非常简单的应用程序。当我启动这个应用程序时,它只会将我带到这个网页https://social.tre.it/expert https://social.tre.it/expert.
我想自动登录,那么有没有办法自动填写用户名和密码,检查“我接受条件”标记并按“登录”按钮?
我试过这个自动填充用户名和密码 UIWebView Swift https://stackoverflow.com/questions/26329771/autofill-username-and-password-uiwebview-swift但它不起作用,我不是该页面的创建者,所以我不知道它的结构到底如何。
即使 iCloud 钥匙串可以填写表格也会很酷...但也许我要求太多了!
您可以使用 JavaScript 来完成此操作。
如果您检查该页面,您可以很容易地找到文本输入字段的 ID(expert_email
and expert_password
)并执行一些JS代码来填充它们。
实施webViewDidFinishLoad
的方法UIWebView
像这样委托:
目标-C:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
//fill data
NSString *email = @"[email protected] /cdn-cgi/l/email-protection";
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();"];
});
}
SWIFT:
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 代码的方法更为合理。
Edit:
我更新了代码以演示如何检查复选框以及如何提交表单。
一些注意事项:
- 当登录失败时,页面会重新加载,因此您最终会陷入无限循环的调用
webViewDidFinishLoad
由于您尝试一次又一次地提交,因此您可能需要添加一些逻辑来打破这种情况。这就是为什么我在提交之前延迟以便能够看到发生了什么。
- 除了上一点中的信息之外 - 您还将接到以下电话:
webViewDidFinishLoad
无论如何,在登录成功后(当重定向到下一页时),因此您可能希望在加载不同页面时引发一个标志(仅在登录页面上执行登录尝试)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)