如何通过swift / javascript登录IOS APP中的网站

时间:2017-09-16 05:46:57

标签: javascript ios swift xcode

我正在尝试创建一个用户通过我的用户界面登录的应用程序。我有textLabel,我正在从中提取数据,我想调整数据并使用它在线登录网站并在登录后获取数据。我现在拥有的是WKWebView,它在大多数情况下都是不可见的我要登录的网站,然后填写登录表单并单击按钮 - 全部通过evaluateJavaScript。我现在唯一的问题是,我正在尝试提出能够检查用户是否登录不正确的内容。我要做的是等到javascript执行,然后检查webView并查看url是否已更改为登录页面。但这只有在用户输入正确的密码失败时才有效。如果他们输入的密码不正确,那么之后的所有条目都说密码不正确。我使用观察值检查页面是否已完成加载,但我需要帮助实现此功能。

@IBAction func loginBtnPressed(_ sender: Any) {
    if(!validate(usernameText) || !validate(passwordText))
    {
        self.validationLabel.text = "One or more fields are empty."
        UIView.animate(withDuration: 0.25, animations: {
        self.validationLabel.isHidden = false
        })
        return;
    }
    let oldUrl = webView.url?.absoluteString;
    self.validationLabel.isHidden = true

        webView.evaluateJavaScript("document.getElementById('fieldAccount').value = \(usernameText!.text!)", completionHandler: {(result,err) in print(result ?? "No Result"); print (err ?? "No Error") })
        webView.evaluateJavaScript("document.getElementById('fieldPassword').value = '\(passwordText!.text!)'", completionHandler: {(result,err) in print(result ?? "No Result"); print (err ?? "No Error") })
        webView.evaluateJavaScript("document.getElementById('btn-enter').click()", completionHandler: {(result,err) in
            print(result ?? "No Result"); print (err ?? "No Error") })


    DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(6), execute: {
            // Put your code which should be executed with a delay here


    if(self.webView.url?.absoluteString.contains("termGrades"))!
    {
        print("We're in bois: ")
        self.view = self.webView
    }else
    {


        print("Did not get to grades page..")

        self.validationLabel.text = "Invalid Username/Password"
        UIView.animate(withDuration: 0.25, animations: {
            self.validationLabel.isHidden = false
        })
        let portalURL = URL(string: "*website*")
        let request = URLRequest(url: portalURL!)
        self.webView.load(request)

        return;

        }




     }) }

我是一名新的ios开发人员,但我不想放弃这一点,如果您有任何帮助,或建议更好的方式等待javascript点击按钮和页面加载请分享

编辑: 我想我找到了一个解决方案,但由于某种原因,现在必须点击两次登录按钮才能处理任何事情......

@IBAction func loginBtnPressed(_ sender: Any) {
    if(!validate(usernameText) || !validate(passwordText))
    {
        self.validationLabel.text = "One or more fields are empty."
        UIView.animate(withDuration: 0.25, animations: {
        self.validationLabel.isHidden = false
        })
        return;
    }
    self.validationLabel.isHidden = true

        webView.evaluateJavaScript("document.getElementById('fieldAccount').value = \(usernameText!.text!.description)", completionHandler: {(result,err) in print(result ?? "No Result"); print (err ?? "No Error") })
        webView.evaluateJavaScript("document.getElementById('fieldPassword').value = '\(passwordText!.text!)'", completionHandler: {(result,err) in print(result ?? "No Result"); print (err ?? "No Error") })
        webView.evaluateJavaScript("document.getElementById('btn-enter').click()", completionHandler: {(result,err) in
            print(result ?? "No Result"); print (err ?? "No Error") })
}


override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if keyPath == "loading"
    {
        if(!webView.isLoading) {
            print("Finished navigating to url \(webView.url!)");
            if(webView.url! == URL(string: "**"))
            {
                statusLabel.text = "Done."
            }else if(webView.url! == URL(string: "**"))
            {
                self.validationLabel.text = "Invalid Username/Password"
                UIView.animate(withDuration: 0.25, animations: {
                    self.validationLabel.isHidden = false
                })
            }else if(webView.url! == URL(string: "**"))
            {
                self.view = webView
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

func webView(webView: WKWebView!, didFinishNavigation navigation: WKNavigation!) { print("Finished navigating to url \(webView.url)"); }

确保将WKWebView的委托设置为视图控制器