Pascal
Pascal

Reputation: 1093

SWIFT: WKWebView: Fill in login data

Automatically filled in login data are not accepted from input fields.

In general, I search for a solution like this:

self.webView.evaluateJavaScript("document.getElementsByName('username')[0].value = '[email protected]';", completionHandler: { (res, error) -> Void in
   self.webView.evaluateJavaScript("document.getElementsByClassName('NextButton')[0].click()", completionHandler: {(result, error) -> Void in
       print("Mail address is not accepted!")    
   })
})

But I have to emulate a virtual keyPress event like this:

self.webView.evaluateJavaScript("document.getElementsByName('username')[0].focus()", completionHandler: {(result, error) -> Void in
    self.webView.evaluateJavaScript("document.getElementsByName('username')[0].value = '[email protected]';", completionHandler: { (res, error) -> Void in
        let ep = CGEvent(keyboardEventSource: nil, virtualKey: 0x0E, keyDown: true)
        let eu = CGEvent(keyboardEventSource: nil, virtualKey: 0x0E, keyDown: false)
        ep!.post(tap: CGEventTapLocation.cghidEventTap)
        eu!.post(tap: CGEventTapLocation.cghidEventTap)
    })
})
self.webView.evaluateJavaScript("document.getElementsByClassName('NextButton')[0].click()", completionHandler: {(result, error) -> Void in
    print("Mail address is accepted!")    
})

The virtual keyPress event has got two disadvantages for me:

  1. It seems that the keyPress event is not deterministic and can take a long time.
  2. The login process can't be done in background.

Any ideas for me?

Upvotes: 1

Views: 116

Answers (0)

Related Questions