移动网站网址的Swift HTML内容

时间:2018-09-30 06:58:34

标签: html swift xcode mobile

我有一个URL,我正尝试通过以下方式获取网站的HTML内容:

func getHtml(_ urlString: String) -> String? {

    guard let url = URL(string: urlString) else {
        return nil
    }

    do {
        let html = try String(contentsOf: url, encoding: .ascii)
        return html
    } catch let error {
        print("Error: \(error)")
        return nil
    }
}

if let html = getHtml("https://m.youtube.com/") {
    print(html)
}

我的问题是,这使我获得了网站的桌面版本的html,但是我需要移动版本的html。

我不是在寻找针对该特定网站的解决方法,而是在寻求一种通用解决方案,因此,鉴于移动网站的任何网址,它都不默认为我提供桌面网站的html。

1 个答案:

答案 0 :(得分:1)

如果您在iOS中使用Viewcontroller来获取HTML,则可以使用隐藏的 WKWebView 作为替代,并实现 WKNavigationDelegate ,该方法具有didFinish方法,您可以在其中使用< strong> webView.evaluateJavaScript 。当从移动设备加载wkwebview时,您将获得移动版本的html。这是代码示例。

import UIKit
import WebKit

class YourViewController: UIViewController, WKNavigationDelegate {
     let webView = WKWebView()
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func BtnClicked(_ sender: Any) {
        loadWeb(url: "https://m.youtube.com/")
    }
    func loadWeb(url: String) {
        if let myURL = URL(string: url) {
            let request = URLRequest(url: myURL)
            webView.navigationDelegate = self
            webView.load(request)
        }
    }

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        webView.evaluateJavaScript("document.documentElement.outerHTML") { (data, error) in
            //use html data 
            print("data", data, error.debugDescription)
        }
    }
}