我打算创建一个 Android 应用程序,该应用程序执行网站的 headless 登录,然后在保持登录 session 的同时从后续页面抓取一些内容。
我首先使用了HtmlUnit在一个普通的 Java 项目中,它工作得很好。但是后来发现HtmlUnit与Android不兼容。
然后我试了JSoup通过向登录表单发送 HTTP“POST”请求来获取库。但是生成的页面不会完全加载,因为 JSoup 不支持 JavaScript。
然后有人建议我查看 Selendroid这实际上是一个android测试自动化框架。但我真正需要的是一个同时支持 JavaScript 和 Android 的 Html 解析器。我发现 Selendroid 很难理解,我什至不知道是哪个 dependencies使用。
- selendroid 客户端
- selendroid-独立
- selendroid-server
与 Selenium WebDriver ,代码将像下面这样简单。但是有人可以给我看一个类似的 Selendroid 代码示例吗?
WebDriver driver = new FirefoxDriver();
driver.get("https://mail.google.com/");
driver.findElement(By.id("email")).sendKeys(myEmail);
driver.findElement(By.id("pass")).sendKeys(pass);
// Click on 'Sign In' button
driver.findElement(By.id("signIn")).click();
还有,
- 要将哪些依赖项添加到我的 Gradle.Build 文件中?
- 要导入哪些 Selendroid 库?
最佳答案
不幸的是我没有让 Selendroid 工作。但我找到了一种解决方法,通过仅使用启用了 JavaScript 的 Android 内置 WebView 来抓取动态内容。
mWebView = new WebView();
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new HtmlHandler(), "HtmlHandler");
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (url == urlToLoad) {
// Pass html source to the HtmlHandler
WebView.loadUrl("javascript:HtmlHandler.handleHtml(document.documentElement.outerHTML);");
}
});
JS 方法 document.documentElement.outerHTML
将检索包含在加载的 url 中的完整 html。然后将检索到的 html 字符串发送到 HtmlHandler 类中的 handleHtml 方法。
class HtmlHandler {
@JavascriptInterface
@SuppressWarnings("unused")
public void handleHtml(String html) {
// scrape the content here
}
}
您可以使用像 Jsoup 这样的库从 html 字符串中抓取必要的内容。
关于android - Selendroid 作为网络抓取工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30058692/