使用swift 4自动登录网页

使用swift 4自动登录网页,swift,login,wkwebview,Swift,Login,Wkwebview,我的应用程序中有一个WkWebView,它将用户带到第三方网页,用户必须登录该网页才能访问相关信息。应用程序的所有用户使用相同的预共享登录详细信息(应用程序由企业分发给少数人管理) 我希望该应用程序自动填写用户名和密码的详细信息,然后提交所有无需用户输入。我已经在这里查看了很多帖子,并试图用webViewDidFinishLoad发出帖子请求,但到目前为止还没有运气。大多数信息都是关于存储和调用用户详细信息,而不是预先共享的用户名和密码 任何指向正确方向的帮助都将是巨大的 仅用于加载网站的当前代

我的应用程序中有一个WkWebView,它将用户带到第三方网页,用户必须登录该网页才能访问相关信息。应用程序的所有用户使用相同的预共享登录详细信息(应用程序由企业分发给少数人管理)

我希望该应用程序自动填写用户名和密码的详细信息,然后提交所有无需用户输入。我已经在这里查看了很多帖子,并试图用webViewDidFinishLoad发出帖子请求,但到目前为止还没有运气。大多数信息都是关于存储和调用用户详细信息,而不是预先共享的用户名和密码

任何指向正确方向的帮助都将是巨大的

仅用于加载网站的当前代码为:

导入UIKit 导入WebKit

class TreliskeWeatherViewController: UIViewController, WKUIDelegate {

    var webView: WKWebView!

    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        webView.navigationDelegate = self
        view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        let treliskeWeather = URL(string: " ")
        let myRequest = URLRequest(url: treliskeWeather!)
        webView.load(myRequest)

    }
}
    extension TreliskeWeatherViewController: WKNavigationDelegate {

        func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
            print("Finished navigating to url")

        }

    }

一旦webview加载完毕,您就可以评估javascript文件。我在javascript中使用超时和间隔逻辑只是为了确保元素存在。我只是在这里检查登录按钮,但如果你愿意,你可以检查所有这三个按钮

 func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    guard let jsFile = Bundle.main.url(forResource: "injectCredentials", withExtension: "js") else {
        return
    }

    do {
        let injectJS = try String(contentsOf: jsFile)
        let formatted = String(format: injectJS, "username", "password")
        webView.evaluateJavaScript(formatted) { (value, error) in
          //
        }
    } catch {
        //
    }
}
injectCredentials.js

var timeoutSeconds = 30;

var username = "%@";
var password = "%@";

var checkLogin = setInterval(checkLoginFields, 1000);
setTimeout(function() {
       clearInterval(checkLogin);
       }, timeoutSeconds * 1000);

function checkLoginFields() {
  var usernameInput = document.getElementById('username');
  var passwordInput = document.getElementById('password');
  var signInButton = document.getElementById("login");
  if (signInButton == null) {
    return;
  }
  usernameInput.value = username;
  passwordInput.value = password;
  signInButton.click();
  clearInterval(checkLogin);
}

Arpit你能联系我吗?我是一个初学者,还需要通过一个日志屏幕。比你好多了。谢谢。问候迈克