【问题标题】:Get text of span without ID获取没有 ID 的 span 文本
【发布时间】:2024-01-30 07:00:01
【问题描述】:

我正在尝试从没有 ID 的 Span 行中获取一段文本。使用 Xcode 和 Swift 3。

这是行:

<span class="name">Peter Red</span>

我试过了,但它不起作用:

var name = webView.evaluateJavaScript("document.querySelector('.name').innerHTML")
        print("Name is \(name)")

我也尝试过使用.innerText.textContentouterText,但控制台只打印Name is ()

【问题讨论】:

  • 你试过document.getElementsByClassName('name')[0]吗?
  • document.querySelector('.name').innerHTML 对于在运行该代码时使用该类访问 first 跨度内容的 HTML 是正确的。所以问题是在代码运行时元素不存在,或者没有那个类。 (或者你在滥用evaluateJavaScript;我对此一无所知。)
  • @YuvalBen-Arie:为什么会有不同?一方面,getElementsByClassName 的支持比querySelector 更差。但是 WebKit 浏览器肯定有querySelector
  • 你可以试试document.querySelectorAll('.name')[0].innerHTML,如果它是同类中唯一的一个。但是为什么不能给它一个id呢?
  • .querySelectorAll 工作!!事实是我现在得到:名称是可选的(名称)。如何删除“可选”

标签: javascript html swift webview webkit


【解决方案1】:

evaluateJavaScript(_:completionHandler:) 实例方法需要两个参数。

func evaluateJavaScript(_ javaScriptString: String, 
      completionHandler: ((Any?, Error?) -> Void)? = nil)

您缺少completionHandler,它将在脚本评估完成或失败后运行。

尝试以下方法:

 webView.evaluateJavaScript("document.querySelector('.name').innerHTML") { (name, error) in
        if error == nil {
           print("Name is \(name)")
        }
    }

【讨论】:

    最近更新 更多