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

Mat*_*Car 6 passwords xcode uiwebview ios

我正在为我做一个非常简单的应用程序.当我启动这个应用程序时,它只是将我带到这个网页https://social.tre.it/expert.

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

我尝试了这个自动填充用户名和密码UIWebView Swift,但它不起作用,我不是页面的创建者所以我不知道它的结构如何.

即使iCloud钥匙链填写表格也会很酷......但也许我问的太多了!

Art*_*tal 10

您可以使用JavaScript来执行此操作.

如果你检查页面,你可以很容易地发现文本输入字段的ID(expert_emailexpert_password)并执行一些JS代码来填充它们.

像这样实现委托的webViewDidFinishLoad方法UIWebView:

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();"];
    });
}
Run Code Online (Sandbox Code Playgroud)

迅速:

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();")
    }
}
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

一些说明:

  • 当登录失败时,页面会被重新加载,所以你最终会得到一个无限循环的调用,webViewDidFinishLoad因为你试图反复提交,所以你可能想要添加一些逻辑来打破这种情况.这就是为什么我在提交之前提出延迟以便能够看到正在发生的事情.
  • 除了前一个点的信息-你会得到调用webViewDidFinishLoad后反正登录成功(当重定向到下一页)所以你可能要提出一个标志,一旦不同的页面加载(仅进行登录尝试在登录页面上).