Erik
Erik是基于无头浏览器和HTML解析器WebKit以及Kanna
无头浏览器允许运行功能测试,使用JavaScript访问和操作网页。
let browser = Erik.visit(url: url) { document, error in
// browse HTML element, click, submit form and more
}导航
访问一个URL
Erik.visit(url: url) { object, error in
if let e = error {
} else if let doc = object {
// HTML Inspection
}
}如何获取当前URL?
if let url = Erik.currentURL {..}对于多个浏览,您可以为无头浏览器创建一个实例并使用相同的功能。
let browser = Erik()
browser.visitURL...HTML检查
通过CSS选择器搜索节点
for link in doc.querySelectorAll("a, link") {
print(link.text)
print(link["href"])
}编辑第一个名为“用户”的输入字段
if let input = doc.querySelectorAll("input[name=\"user\"]").first {
input["value"] = "Eric"
}提交一个表单
if let form = doc.querySelector("form[id='search']") as? Form {
form.submit()
}评估一些JavaScript
let javaScriptSource = "console.log("test");"
Erik.evaluate(javaScript:javaScriptSource) { (obj, err) -> Void in
if let error = err {
switch error {
case ErikError.javaScriptError(let message):
print(message)
default :
print("\(error)")
}
}
else if let capturedValue = obj {
// do something according to result
}
}capturedValue是JavaScript变量resultErik的内容。在您的JavaScript代码中影响此变量。
let javaScriptSource = "console.log('test'); var resultErik = 1 + 1;"关于DOM更改的警告
Document对象及其子元素Element。
您必须使用currentContent方法来获取最新的Document对象
获取当前内容
Erik.currentContent { (obj, err) -> Void in
if let error = err {
}
else if let document = obj {
// HTML Inspection
}
}使用未来
作为一个可选功能,您可以使用Future/Promise(Erik 使用框架BrightFutures 和 Result)。
提交谷歌搜索的示例
let url = NSURL(string:"https://www.google.com")!
let value = "Erik The Phantom of Opera"
// visit
var future: Future<Document, NSError> = Erik.visitFuture(url: url)
// fill input field
future = future.flatMap { document -> Future<Document, NSError> in
if let input = document.querySelector("input[name='q']") {
input["value"] = value
}
if let form = document.querySelector("form[name=\"f\"]") as? Form {
form.submit()
}
return Erik.currentContentFuture()
}
// finally get final result as success or error
future.onSuccess { document in
// parse result
}
future.onFailure { error in
print("\(error)")
}限制
在 iOS 9 和 macOS 10.11 上,您需要确保使用 https://,因为 iOS 9 和 macOS 10.11 不喜欢应用程序在不安全的情况下发送或接收数据。如果您想覆盖这个设置,请点击此处阅读有关App Transport Security的信息。
链接
设置
使用cocoapods
CocoaPods是Objective-C和Swift的集中式依赖项管理器。请访问此处了解更多信息。
-
将项目添加到您的Podfile中。
use_frameworks! pod 'Erik' // or specific target target :test do pod 'Erik' end
-
运行
pod install并打开.xcworkspace文件以启动Xcode。
可选未来
将pod 'Erik/Future'添加到您的Podfile中,并运行pod install。
使用carthage
Carthage是Objective-C和Swift的去中心化依赖项管理器。
-
将项目添加到您的Cartfile中。
github "phimage/Erik"
路线图
- (WIP) WKWebView 截图 (webkit 私有 API?)
为什么是 Erik?
一个著名的无头浏览器名叫 PhantomJS,一个非常有名的浏览器是 Opera。
作为致敬,我使用了 Erik,这是 Gaston Leroux 的小说《歌剧魅影》中主角的名字,英文中被熟知为