在 JavaScript 在 Swift 中修改后,是否抓取 HTML?
Scrape HTML after JavaScript has modified it in Swift?
我正在尝试编写我的第一个网站抓取工具,我的第一步是将 HTML 保存为一个字符串。但是,据我所知,我需要获取的数据本身并不在 HTML 代码中,而是在 JavaScript 执行某些操作后添加的。
我目前的代码是这样的:
let myURLString = "Example URL"
let myURL = URL(string: myURLString)
var myHTMLString = ""
do {
myHTMLString = try String(contentsOf: myURL!)
} catch let error {
print("Error: \(error)")
}
但这似乎没有执行 javascript 而只是给了我 'unprocessed' HTMl.
我阅读了这个答案 here,但它是用 Swift 2.0 编写的,因为老实说,我并没有真正理解发生了什么(我没有太多编程知识经验 ): 我无法在 Swift 3.
上班
那么,有没有办法从网站上获取 HTML,运行 JavaScript,然后将其保存为 Swift 中的字符串 3?如果是这样,你是怎么做到的?
谢谢!
经过一番挖掘,我得到了一些有用的东西:
import Cocoa
import WebKit
class ViewController: NSViewController, WebFrameLoadDelegate {
@IBOutlet var myWebView: WebView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.myWebView.frameLoadDelegate = self
let urlString = "YOUR HTTPS URL"
self.myWebView.mainFrame.load(NSURLRequest(url: NSURL(string: urlString)! as URL) as URLRequest!)
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
func webView(_ sender: WebView!, didFinishLoadFor frame: WebFrame!) {
let doc = myWebView.stringByEvaluatingJavaScript(from: "document.documentElement.outerHTML")! //get it as html
//doc now has the 'processed HTML'
}
}
我正在尝试编写我的第一个网站抓取工具,我的第一步是将 HTML 保存为一个字符串。但是,据我所知,我需要获取的数据本身并不在 HTML 代码中,而是在 JavaScript 执行某些操作后添加的。
我目前的代码是这样的:
let myURLString = "Example URL"
let myURL = URL(string: myURLString)
var myHTMLString = ""
do {
myHTMLString = try String(contentsOf: myURL!)
} catch let error {
print("Error: \(error)")
}
但这似乎没有执行 javascript 而只是给了我 'unprocessed' HTMl.
我阅读了这个答案 here,但它是用 Swift 2.0 编写的,因为老实说,我并没有真正理解发生了什么(我没有太多编程知识经验 ): 我无法在 Swift 3.
上班那么,有没有办法从网站上获取 HTML,运行 JavaScript,然后将其保存为 Swift 中的字符串 3?如果是这样,你是怎么做到的?
谢谢!
经过一番挖掘,我得到了一些有用的东西:
import Cocoa
import WebKit
class ViewController: NSViewController, WebFrameLoadDelegate {
@IBOutlet var myWebView: WebView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.myWebView.frameLoadDelegate = self
let urlString = "YOUR HTTPS URL"
self.myWebView.mainFrame.load(NSURLRequest(url: NSURL(string: urlString)! as URL) as URLRequest!)
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
func webView(_ sender: WebView!, didFinishLoadFor frame: WebFrame!) {
let doc = myWebView.stringByEvaluatingJavaScript(from: "document.documentElement.outerHTML")! //get it as html
//doc now has the 'processed HTML'
}
}