2017-05-05 52 views
1

嘗試使用WKWebView使用首選評估Javascript swift函數來獲取html元素名稱或值。我一直收到零。我想也許我的函數在頁面加載之前觸發,因此從未找到元素。現在只是試圖通過類名獲取元素文本。下面是我在ViewController中的代碼使用WKWebKit和Swift 3獲取HTML元素值

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. 
    } 
} 

回答

0

你是部分權利。當您撥打evaluateJavascript時,網站將無法完成加載。但也有其他錯誤:

  • ,則應該設置的navigationDelegate代替uiDelegate
  • 由於應用程序傳輸安全,URL請求http地址是不允許的。如果網站支持,則使用https或適當地使用configure your app
  • 拼錯函數名(缺少的sgetElement
  • 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)) 
    } 
} 
+0

謝謝你幫我解決這個問題。不幸的是它沒有奏效。在此代碼中打孔並評論我的網頁視圖不會加載。還有一個警衛錯誤是沒有什麼大不了的。有沒有其他的東西我錯過了? @代碼不同 – plgelso