这是我用来尝试将网站html中某个项目的长度快速转换为变量的代码,因此我可以根据类的长度运行一个函数
self.viewController?.webBrowser?.evaluateJavaScript("document.getElementsByClassName('siteName').length") { (value, error) in
print("LENGTH IS ", value)
print("ERROR IS ", error)
let jsValue = value as? Int
if jsValue == 0{
self.waitClick()
}else{
self.startItemColor()
}
}
无论长度是多少,我都会得到0作为值
答案 0 :(得分:1)
当您尝试访问DOM Element
时可能还没有准备好。您应该move
将代码转换为didFinish
协议的WKNavigationDelegate
方法。
所以您的UIViewController
应该如下所示:
class ViewController: UIViewController, WKNavigationDelegate {
override func viewDidLoad(){
super.viewDidLoad()
...
webBrowser.navigationDelegate = self
webBrowser.load(request)
...
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
webView.evaluateJavaScript("document.getElementsByClassName('siteName').length") { (value, error) in
print("LENGTH IS ", value)
print("ERROR IS ", error)
let jsValue = value as? Int
if jsValue == 0{
self.waitClick()
} else {
self.startItemColor()
}
}
}
}
也不要忘记像这样在您的App Transport Security
中启用info.plist
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
如果这不起作用,请尝试调试原因。可能尝试在JavaScript中调用一个返回class="sitename"
元素以及console.log(length)
长度的方法,以便您可以进一步进行调试并查看发生的情况。
答案 1 :(得分:0)
看起来像getElementsByClassName
返回一个数组,因此,如果找不到具有该类名称的元素,则该数组的length
将为零。它没有获得元素本身的length
。