使用 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 数据