使用 alamofire + swift 获取动态加载的 html

Posted

技术标签:

【中文标题】使用 alamofire + swift 获取动态加载的 html【英文标题】:get dynamically loaded html using alamofire + swift 【发布时间】:2017-04-25 04:18:58 【问题描述】:

我正在尝试请求网站的 html 代码并在 Xcode (Swift 3.0) 和 pod Alamofire 中的应用程序中使用它。在在线的 html 代码中,我要抓取的数据内容位于 div 类中,该类以 javascript Web 插件的形式从事件日历返回数据。由于网站不是静态的,所以当我请求 html 并将结果响应打印为字符串时,我想要的数据不包含在字符串中。出现一条消息:

<noscript>Your browser must support JavaScript to view this content. Please enable JavaScript in your browser settings then try again. <a href="https://www.trumba.com">Events calendar powered by Trumba</a> </noscript>

我使用 Alamofire 的代码如下所示:

func downloadCalendar()
    Alamofire.request(urlString).responseString  (AlamofireResponse) in
        print(AlamofireResponse.result.value!)
    
  

urlString 是实际网页 url 的变量。 有没有办法使用 Alamofire 将在线 html 中出现的所有 html 获取到 Xcode 中?如果 Alamofire 无法使用 Swift,是否有另一种方法可以做到这一点?

【问题讨论】:

【参考方案1】:

我曾尝试完成类似的事情,不幸的是无济于事......

它接缝 AlamoFire 抓住它得到的第一个响应......

有一个解决方法——使用 UIWebView:

static let webView = UIWebView()
self.webView.loadRequest(URLRequest.init(url: URL.init(string:"http://example.com")!)

DispatchQueue.main.asyncAfter(deadline: .now()+10.0) [unowned self] in
        if let html = self.webView.stringByEvaluatingJavaScript(from: "document.documentElement.outerHTML") 
        print(html)

其中10.0 是 javascript 完成网页数据加载所需的大约秒数。

但是因为:它不是线程安全的,你必须使用单例 webView, 导入 UIKit 并且无法在后台执行 - 这远非完美的解决方案...

在两者之间设置一个代理网络服务器来为您进行解析可能会更容易。

干杯!

【讨论】:

以上是关于使用 alamofire + swift 获取动态加载的 html的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 / Alamofire:我无法获取 UITableView 上的数据

如何使用 Alamofire (Swift 2.2) 获取 Twitter 访问令牌

Swift 3 / Alamofire 4:在 TableView 上使用 ID 获取数据

如何使用 Alamofire,Swift 4 为 UICollectionView 获取 JSON 数据

使用 Swift 4 和 Alamofire 获取客户端证书以用于 Https 调用身份验证

通过使用 Alamofire 和解码获取 JSON - Swift 4