Ich versuche, eine Anwendung zu erstellen, wo sich der Benutzer über meine Benutzeroberfläche anmeldet. Ich habe TextLabels, die ich Daten ziehe, ich möchte taje die Daten und verwenden Sie es, um sich auf einer Website online anmelden und Daten sobald eingeloggt bekommen. Was ich gerade habe, ist ein WKWebView, das die meiste Zeit unsichtbar ist, die geladen wird die Webseite, in die ich mich einloggen möchte, füllt dann die Anmeldeformulare aus und klickt auf die Schaltfläche - alles über evaluateJavaScript. Mein einziges Problem im Moment ist, dass ich versuche, etwas zu finden, das prüfen kann, ob sich der Benutzer falsch angemeldet hat. Was ich versuche zu tun ist zu warten, bis das Javascript ausgeführt wird, dann überprüfe das WebView und sehe, ob die URL auf die Anmeldeseite gewechselt hat. Dies funktioniert jedoch nur, wenn der Benutzer nicht ein korrektes Passwort eingegeben hat. Wenn sie einmal ein falsches Passwort erhalten, sagen alle nachfolgenden Einträge das Passwort falsch. Ich benutze einen Beobachtungswert, um zu überprüfen, ob die Seite geladen wurde, aber ich brauche Hilfe bei der Implementierung.Wie logge ich mich in einer IOS APP über swift/javascript ein
@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;
}
}) }
Ich bin ein neuer ios Entwickler, aber ich möchte nicht auf diese verzichten, wenn Sie haben jede mögliche Hilfe, oder Vorschläge zu einer besseren Art und Weise für die Javascript warten auf die Schaltfläche und die Seite klicken bitte teilen
EDIT fullyload: ich denke, dass ich eine Lösung gefunden, aber aus irgendeinem Grund jetzt die Login-Schaltfläche geklickt werden muss, um zweimal dafür, alles zu verarbeiten ...
@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
}
}
}
Ich setze den Delegaten der WebView, aber wird immer noch nie aufgerufen ... –