我有一个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。
我不是在为这个特定网站寻找解决方法,而是在寻找通用解决方案,这样,给定移动网站的任何 URL,它不会默认为让我获得桌面网站的 html。
如果你在iOS中使用Viewcontroller来获取HTML,你可以使用隐藏的WKWebView作为替代方案,并实现WKNavigationDelegate,它具有didFinish方法,你可以在其中使用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)
}
}
}