Ios 在UIWebView中自动填写用户名和密码

Ios 在UIWebView中自动填写用户名和密码,ios,xcode,uiwebview,passwords,Ios,Xcode,Uiwebview,Passwords,我正在为我做一个非常简单的应用程序。当我启动这个应用程序时,它只会把我带到这个网页 我想自动登录,所以有没有办法自动填写用户名和密码,检查“我接受条件”标记并按下“登录”按钮 我试过了,但是没有用,我不是这个页面的创建者,所以我不知道它是如何构造的 即使iCloud的钥匙链会填满表格也很酷…但也许我要求太多了 您可以使用JavaScript来完成此操作 如果您查看页面,您可以很容易地发现文本输入字段的ID(expert\u email和expert\u password)并执行一些JS代码来填充

我正在为我做一个非常简单的应用程序。当我启动这个应用程序时,它只会把我带到这个网页

我想自动登录,所以有没有办法自动填写用户名和密码,检查“我接受条件”标记并按下“登录”按钮

我试过了,但是没有用,我不是这个页面的创建者,所以我不知道它是如何构造的


即使iCloud的钥匙链会填满表格也很酷…但也许我要求太多了

您可以使用JavaScript来完成此操作

如果您查看页面,您可以很容易地发现文本输入字段的ID(
expert\u email
expert\u password
)并执行一些JS代码来填充它们

执行
UIWebView
委托的
webViewDidFinishLoad
方法,如下所示:

目标-C:

SWIFT:

这应该填写您的信息。但是,如果该网站将来更改其结构,则此代码很容易被破坏。当您处理自己的页面时,这种执行JS代码的方法更合理

编辑:

我更新了代码以演示如何选中复选框以及如何提交表单

一些注意事项:

  • 当登录失败时,页面将被重新加载,因此您将以对
    webViewDidFinishLoad
    的无休止的调用结束,因为您正试图一次又一次地提交,因此您可能需要添加一些逻辑来打破这种情况。这就是为什么我在提交之前会延迟,以便能够看到发生了什么
  • 除了上一点中的信息之外,登录成功后(重定向到下一页时),您将收到对
    webviewdiffinishload
    的调用,因此您可能希望在加载不同页面后升起一个标志(仅在登录页面上执行登录尝试)

我会将用户名保存在
NSUserDefaults
中。对于密码,如果用户选择,您可以在用户输入密码后使用TouchID。简单地自动填写密码不会很安全。不,但这是一个只适合我的应用程序!我的问题只是获取我的用户名和密码字符串并在网页中填写表单。很好,它很有效!不幸的是,我从未使用过Java,所以我对如何与它交互没有任何想法。你有没有办法标记这两个框和表单,以及如何按下登录按钮?
- (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();")
    }
}