None of the ways I've found to read the body of the html are working, all are returning nil.
//
// ViewController.swift
// ProjectGetJSONJasper
//
// Created by Scott Lydon on 5/1/22.
//
import UIKit
import WebKit
class ViewController: WKWebViewController {
override var startWebsite: String {
"https://app.jasper.ai/?_gl=1%2a1r3ye0c%2a_ga%2aMjA2NDczMDkwNy4xNjUxMDI3NjMx%2a_ga_D4P3CS8W5P%2aMTY1MTM4NjA0My43LjEuMTY1MTM4NjA1MS41Mg.."
}
}
class WKWebViewController: UIViewController {
var startWebsite: String {
"overide me!"
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
setupViews()
}
func setupViews() {
let webView = WKWebView()
webView.navigationDelegate = self
webView.uiDelegate = self
webView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(webView)
webView.load(URLRequest(url: URL(string: startWebsite)!))
NSLayoutConstraint.activate(
[
webView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
webView.topAnchor.constraint(equalTo: view.topAnchor),
webView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
webView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
]
)
}
@objc func evaluated(_ webView: WKWebView, html: String, error: Error?) {
// override me!
}
}
extension WKWebViewController: WKNavigationDelegate {
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
webView.evaluateJavaScript("document.documentElement.outerHTML.toString()") { [weak self]
(html: Any?, error: Error?) in
guard let html = html else { return }
self?.evaluated(webView, html: String(describing: html), error: error)
}
webView.evaluateJavaScript("document.body.innerHTML") { [weak self]
(html: Any?, error: Error?) in
guard let html = html else { return }
self?.evaluated(webView, html: String(describing: html), error: error)
}
webView.evaluateJavaScript("document.documentElement.outerHTML") { [weak self]
(html: Any?, error: Error?) in
guard let html = html else { return }
self?.evaluated(webView, html: String(describing: html), error: error)
}
webView.evaluateJavaScript("document") { [weak self]
(html: Any?, error: Error?) in
guard let html = html else { return }
self?.evaluated(webView, html: String(describing: html), error: error)
}
}
}
extension WKWebViewController: WKUIDelegate {
// So alerts and popups appear to be intercepted and available for my control through delegate methods!
// It can also be a way to print or send information to myself from the webpge. This confirms that my javascript was executed!!!! woot woot!
func webView(
_ webView: WKWebView,
runJavaScriptAlertPanelWithMessage message: String,
initiatedByFrame frame: WKFrameInfo
) async {
print("reached: ", message)
print("bla")
}
}