我如何使用 Swift 2.0 模拟用户点击网页按钮?
How can i simulate an user click on a web page button using Swift 2.0?
我想编写一个假用户点击网页视图按钮自动加载正确网页的代码。我在 Swift 2.0 中工作,url 不包含任何索引页。
您可以在您的应用程序 Web 视图中注入 javascript,如果您使用一个来显示页面
如果您使用 UIWebView,请使用方法 stringByEvaluatingJavaScriptFromString(jscodestring)
如果你使用 WKWebView 使用方法 evaluateJavaScript(jscodestring)
那就是javascript问题了。
首先查看要单击的元素:文档。 getElementById 或 getElementByName,document.querySelector,等等...
然后使用htmldom方法click();
更新的解决方案:它很丑陋,但有效。该站点需要您跳一些圈才能使用它,但是 secondURL
将加载一个仅包含 table.
的页面
绝对有一个更干净的解决方案,它不需要 JS 或多个页面加载,但我把它留给你。
我通过查看 Safari 的 Web Inspector
找到了 secondURL
import UIKit
private let firstURL = NSURL(string: "https://legymnase67.la-vie-scolaire.fr/vsn.main/;jsessionid=E2D99A46028465A9D7F636521C64088B.node2?autolog=70caa4a471e8f6f0856735aed506b01a6307246c445beb160259f75c1c700f7978631d698cc5e0e890452bd182e5960e6153be7c4a3d2615ff0daf981a17877d46e472cdf2ef2328977c3957a58121e3556c4b9b808e22a76d0cbb994292a2144d64f367714c7dfbf4d3e24cea5f0274")!
private let secondURL = NSURL(string: "https://legymnase67.la-vie-scolaire.fr/vsn.main/releveNote/releveNotes")!
class WebController: UIViewController, UIWebViewDelegate {
let webView: UIWebView = UIWebView()
override func viewDidLoad() {
super.viewDidLoad()
self._setupWebView()
// load the webpage, wait 6 seconds then tap the button
webView.loadRequest(NSURLRequest(URL: firstURL))
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(6 * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), {
self.tapButton();
// wait another 4 seconds then load the direct notes url
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(4 * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), {
self.webView.loadRequest(NSURLRequest(URL: secondURL))
// allow the page to load, and print the html
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(4 * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), {
print(self.webView.stringByEvaluatingJavaScriptFromString("document.body.innerHTML"))
})
})
})
}
func tapButton() {
webView.stringByEvaluatingJavaScriptFromString("changeIframeSrc(this, 'NOTES');")
}
func _setupWebView() {
webView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(webView)
let views = ["webView":webView]
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[webView]|", options: [], metrics: nil, views: views))
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[webView]|", options: [], metrics: nil, views: views))
}
}
我想编写一个假用户点击网页视图按钮自动加载正确网页的代码。我在 Swift 2.0 中工作,url 不包含任何索引页。
您可以在您的应用程序 Web 视图中注入 javascript,如果您使用一个来显示页面
如果您使用 UIWebView,请使用方法 stringByEvaluatingJavaScriptFromString(jscodestring)
如果你使用 WKWebView 使用方法 evaluateJavaScript(jscodestring)
那就是javascript问题了。
首先查看要单击的元素:文档。 getElementById 或 getElementByName,document.querySelector,等等...
然后使用htmldom方法click();
更新的解决方案:它很丑陋,但有效。该站点需要您跳一些圈才能使用它,但是 secondURL
将加载一个仅包含 table.
绝对有一个更干净的解决方案,它不需要 JS 或多个页面加载,但我把它留给你。
我通过查看 Safari 的 Web Inspector
找到了secondURL
import UIKit
private let firstURL = NSURL(string: "https://legymnase67.la-vie-scolaire.fr/vsn.main/;jsessionid=E2D99A46028465A9D7F636521C64088B.node2?autolog=70caa4a471e8f6f0856735aed506b01a6307246c445beb160259f75c1c700f7978631d698cc5e0e890452bd182e5960e6153be7c4a3d2615ff0daf981a17877d46e472cdf2ef2328977c3957a58121e3556c4b9b808e22a76d0cbb994292a2144d64f367714c7dfbf4d3e24cea5f0274")!
private let secondURL = NSURL(string: "https://legymnase67.la-vie-scolaire.fr/vsn.main/releveNote/releveNotes")!
class WebController: UIViewController, UIWebViewDelegate {
let webView: UIWebView = UIWebView()
override func viewDidLoad() {
super.viewDidLoad()
self._setupWebView()
// load the webpage, wait 6 seconds then tap the button
webView.loadRequest(NSURLRequest(URL: firstURL))
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(6 * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), {
self.tapButton();
// wait another 4 seconds then load the direct notes url
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(4 * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), {
self.webView.loadRequest(NSURLRequest(URL: secondURL))
// allow the page to load, and print the html
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(4 * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), {
print(self.webView.stringByEvaluatingJavaScriptFromString("document.body.innerHTML"))
})
})
})
}
func tapButton() {
webView.stringByEvaluatingJavaScriptFromString("changeIframeSrc(this, 'NOTES');")
}
func _setupWebView() {
webView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(webView)
let views = ["webView":webView]
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[webView]|", options: [], metrics: nil, views: views))
self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[webView]|", options: [], metrics: nil, views: views))
}
}