SWIFT: заполнение ввода HTML [type = «text»] - PullRequest
0 голосов
/ 02 июня 2018

Как заполнить поля в HTML-форме, которая в настоящее время представлена ​​в веб-представлении?Целью этого приложения является автоматический вход на веб-сайт.Основываясь на разных уроках, я в основном скопировал быстрый код, но мой не работает .Было бы замечательно получить подсказку о том, в чем может быть ошибка, или даже совершенно иной подход.

Важные части веб-сайта Я хочу войти, построено так:

текстовое поле Имя пользователя:

<input type="text" class="form-control" name="username" id="username" placeholder="Username:">

текстовое поле Пароль:

<input type="password" class="form-control" name="password" id="password" maxlength="20" placeholder="Passwort:">

Кнопка входа в систему (для входа в систему):

<input type="submit" value="login" class="btn btn-default">

Мой сломанный swift-код из ViewController.swift :

Он просто загружает сайт, но без ввода имени пользователя или пароля и без отправки.

@IBOutlet weak var MyWebView: UIWebView!

func webViewDidFinishLoad(MyWebView: UIWebView) {

    // fill data
    let savedUsername = "USERNAME"
    let savedPassword = "PASSWORD"

    let fillForm = String(format: "document.getElementById('username').value = '\(savedUsername)';document.getElementById('password').value = '\(savedPassword)';")
    MyWebView.stringByEvaluatingJavaScript(from: fillForm)

    //submit form
    let deadlineTime = DispatchTime.now() + .seconds(1)
    DispatchQueue.main.asyncAfter(deadline: deadlineTime) {
        MyWebView.stringByEvaluatingJavaScript(from: "document.value[\"login\"].submit();")
    }
}

override func viewDidLoad() {
    super.viewDidLoad()

    let url = URL (string: "https://www.austrocontrol.at/flugwetter/")
    MyWebView.loadRequest(URLRequest(url: url!))
    webViewDidFinishLoad(MyWebView: MyWebView)
}

Я не уверен, как справиться с этим выводом, который я получил из Xcode-симулятора, но, возможно, это поможет каким-то образом:

[...] Starting WebFilter logging for process AustroControl Viewer
[...] _userSettingsForUser : (null)
[...] _WebFilterIsActive returning: NO
[...] [MediaRemote] [AVOutputContext] WARNING: AVF context unavailable for +[MRAVOutputContext sharedAudioPresentationContext]_block_invoke
[...] [MediaRemote] [AVOutputContext] WARNING: AVF context unavailable for +[MRAVOutputContext createOutputContextWithUniqueIdentifier:]

1 Ответ

0 голосов
/ 13 августа 2018

Прежде всего: лучше использовать WKWebView.

Вы можете создать функцию, которая запускает JavaScript в вашем WebView и заполняет HTML-форму непосредственно перед ее отправкой.

private func setWebViewValue(name: String, data: String) {
    let jsFunc = "document.getElementById(\"\(name)\").value = \"\(data)\""
    webView.evaluateJavaScript(jsFunc, completionHandler: nil)
}
...