Swift / 带有 xpath 的 UIWebView / css
Swift / UIWebView with xpath / css
我有一个要在 UIWebView 中显示的网站元素。该元素具有 css 和 xpath 的唯一 ID。可能吗?我怎么能那样做?非常感谢帮助。
我通常使用这个代码:
let url : NSURL! = NSURL(string: "http://blablablabla.com")
webView.loadRequest(NSURLRequest(URL: url))
但我不想显示整个页面。只有具有该 ID 的元素。
我假设您使用的是 UIWebView
,而不是较新的 WKWebView
。你需要的是一个 HTML 解析器(我选择了 HTMLReader
)。下载页面内容后,提取您想要的 div
并将页面的 body
替换为 div
.
的 innerHTML
下面的代码获取 你知道吗 部分 Wikipedia:
import HTMLReader
override func viewDidLoad() {
super.viewDidLoad()
loadHTML()
}
func loadHTML() {
let url = NSURL(string: "https://en.wikipedia.org/wiki/Main_Page")!
let request = NSURLRequest(URL: url)
let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
let task = session.dataTaskWithRequest(request) { data, response, error in
guard error == nil else {
print(error!.localizedDescription)
return
}
guard let data = data else {
print("data is nil")
return
}
let html = HTMLDocument(data: data, contentTypeHeader: nil)
if let head = html.firstNodeMatchingSelector("head"),
didYouKnow = html.firstNodeMatchingSelector("#mp-dyk") {
let newHTML = "<html><head>\(head.innerHTML)</head><body>\(didYouKnow.innerHTML)</body></html>"
self.webView.loadHTMLString(newHTML, baseURL: url)
}
}
task.resume()
}
这是相当基础的,但并非 100% 万无一失。看看能不能解决你的问题。
我有一个要在 UIWebView 中显示的网站元素。该元素具有 css 和 xpath 的唯一 ID。可能吗?我怎么能那样做?非常感谢帮助。
我通常使用这个代码:
let url : NSURL! = NSURL(string: "http://blablablabla.com")
webView.loadRequest(NSURLRequest(URL: url))
但我不想显示整个页面。只有具有该 ID 的元素。
我假设您使用的是 UIWebView
,而不是较新的 WKWebView
。你需要的是一个 HTML 解析器(我选择了 HTMLReader
)。下载页面内容后,提取您想要的 div
并将页面的 body
替换为 div
.
innerHTML
下面的代码获取 你知道吗 部分 Wikipedia:
import HTMLReader
override func viewDidLoad() {
super.viewDidLoad()
loadHTML()
}
func loadHTML() {
let url = NSURL(string: "https://en.wikipedia.org/wiki/Main_Page")!
let request = NSURLRequest(URL: url)
let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
let task = session.dataTaskWithRequest(request) { data, response, error in
guard error == nil else {
print(error!.localizedDescription)
return
}
guard let data = data else {
print("data is nil")
return
}
let html = HTMLDocument(data: data, contentTypeHeader: nil)
if let head = html.firstNodeMatchingSelector("head"),
didYouKnow = html.firstNodeMatchingSelector("#mp-dyk") {
let newHTML = "<html><head>\(head.innerHTML)</head><body>\(didYouKnow.innerHTML)</body></html>"
self.webView.loadHTMLString(newHTML, baseURL: url)
}
}
task.resume()
}
这是相当基础的,但并非 100% 万无一失。看看能不能解决你的问题。