如何在当前以Web视图中显示的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:
它只是加载网站,但没有填写用户名或密码,也没有提交。
@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:]
首先:最好使用WKWebView
。
您可以创建一个函数,在您的WebView
中运行JavaScript,并在提交之前填写HTML表单。
private func setWebViewValue(name: String, data: String) {
let jsFunc = "document.getElementById("(name)").value = "(data)""
webView.evaluateJavaScript(jsFunc, completionHandler: nil)
}