【问题标题】:Scrape HTML after JavaScript has modified it in Swift?在 JavaScript 在 Swift 中修改 HTML 后抓取 HTML?
【发布时间】:2016-10-10 01:53:51
【问题描述】:

我正在尝试编写我的第一个网站抓取工具,我的第一步是将 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,而只是给了我“未处理”的 HTMl。

我读了这个答案here,但它是用 Swift 2.0 编写的,而且老实说,我并没有真正理解发生了什么(我没有太多编程经验):我无法理解在 Swift 3 中工作。

那么,有没有办法从网站获取 HTML,运行 JavaScript,然后在 Swift 3 中将其保存为字符串?如果是这样,你是怎么做的?

谢谢!

【问题讨论】:

    标签: javascript html swift html-parsing


    【解决方案1】:

    经过一番挖掘,我得到了一些有用的东西:

    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'
            }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      • 2014-05-10
      • 1970-01-01
      • 2012-04-14
      • 2014-11-03
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多