通过在 WKWebView 中评估 JavaScript 来获取 HTML

Posted

技术标签:

【中文标题】通过在 WKWebView 中评估 JavaScript 来获取 HTML【英文标题】:Get HTML by evaluating JavaScript in a WKWebView 【发布时间】:2017-11-03 10:05:39 【问题描述】:

我在我的 ios 应用程序中使用 WKWebView,在加载网页后,我想获取 gmail.com 的 html。我在 ViewDidAppear 中调用的函数中有这个表达式:

func getHTML() 
    webView.evaluatejavascript("document.documentElement.outerHTML.toString()", completionHandler:  (html: Any?, error: Error?) in
           print(html)
    )

但是,当我运行此函数时,我在控制台中得到以下输出:

Optional(<html><head></head><body></body></html>)

我做错了什么? Gmail 不是唯一给我这个结果的网页——我尝试的每个页面都给我相同的输出。

这是我所有的代码:

// MARK: Outlets
@IBOutlet weak var webView: WKWebView!

override func viewDidLoad() 
    super.viewDidLoad()

    let url = URL(string: "https://www.gmail.com")!
    let request = URLRequest(url: url)

    webView.navigationDelegate = self
    self.webView.load(request)


override func viewDidAppear(_ animated: Bool) 
    super.viewDidAppear(animated)
    getHTML() // the function posted above

【问题讨论】:

【参考方案1】:

问题是网页没有完全加载!我在 ViewDidAppear 中调用了我的函数,但是在我添加了一个按钮并在按下按钮时调用了 javascript 之后,我得到了我正在寻找的 HTML。

【讨论】:

以上是关于通过在 WKWebView 中评估 JavaScript 来获取 HTML的主要内容,如果未能解决你的问题,请参考以下文章

WKWebView 在不重新加载页面的情况下评估 Javascript

在 WKWebView 的 iframe 中评估 JavaScript?

如何通过 WKWebVIew 或 JSC 在 iOS 应用程序中加载 WebAssembly

iOS为带有嵌入推文的html字符串计算正确的WKWebview高度

如何从 WKWebView 获取 cookie?

当 WKWebView 框架调整大小时,内容大小损坏