如何填写当前在Web视图中显示的HTML表单上的字段? 此应用程序的目的是自动登录到网站。 根据不同的教程,我主要是复制粘贴一个快速的代码,但我的不起作用。能够暗示错误是什么,甚至完全不同的方法是非常值得赞赏的。
我要登录的website的重要部分是这样构建的:
text-field 用户名:
<input type="text" class="form-control" name="username" id="username" placeholder="Username:">
text-field 密码:
<input type="password" class="form-control" name="password" id="password" maxlength="20" placeholder="Passwort:">
LogIn-Button (提交登录信息):
<input type="submit" value="login" class="btn btn-default">
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:]
答案 0 :(得分:2)
首先:最好使用WKWebView
。
您可以制作一个函数,在您的WebView
中运行JavaScript,并在提交表单之前填写HTML表单。
private func setWebViewValue(name: String, data: String) {
let jsFunc = "document.getElementById(\"\(name)\").value = \"\(data)\""
webView.evaluateJavaScript(jsFunc, completionHandler: nil)
}