gpt4 book ai didi

javascript - 使用 WKWebKit 和 Swift 3 获取 HTML 元素值

转载 作者:行者123 更新时间:2023-11-28 08:10:59 28 4
gpt4 key购买 nike

尝试使用 WKWebView 使用首选评估 Javascript swift 函数获取 html 元素名称或值。我一直收到零。我想也许我的函数在页面加载之前就触发了,因此永远找不到元素。现在只是试图通过类名获取元素文本。下面是我在 ViewController 中的代码

    import UIKit
import WebKit

class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate {

var web: WKWebView!

override func loadView() {
let webConfiguration = WKWebViewConfiguration()
web = WKWebView(frame: .zero, configuration: webConfiguration)
web.uiDelegate = self
view = web
}

override func viewDidLoad() {
super.viewDidLoad()

let url = URL(string: "http://www.appcoda.com")
let myRequest = URLRequest(url: url!)
web.load(myRequest)

web.evaluateJavaScript("document.getElementByClassName('excerpt').innerText") {(result, error) in
if error != nil {
print(String(describing:result))
}
}
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}

最佳答案

你说对了一部分。当您调用 evaluateJavascript 时,网站不会完成加载。但也有其他错误:

  • 您应该设置 navigationDelegate 而不是 uiDelegate
  • 由于应用程序传输安全,不允许对 http 地址的 URL 请求。如果网站支持,请使用 httpsconfigure your app适本地。
  • 您拼错了函数名称(在 getElement 之后缺少 s)
  • getElementsByClassName 返回一个数组,因此您必须选择要查找的 innerText 的元素

试试这个:

override func viewDidLoad() {
super.viewDidLoad()

web = WKWebView(frame: .zero)
web.navigationDelegate = self

let url = URL(string: "https://www.appcoda.com")
let myRequest = URLRequest(url: url!)
web.load(myRequest)
}

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
web.evaluateJavaScript("document.getElementsByClassName('excerpt')[0].innerText") {(result, error) in
guard error == nil {
print(error!)
return
}

print(String(describing: result))
}
}

关于javascript - 使用 WKWebKit 和 Swift 3 获取 HTML 元素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43808304/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com