我打算创建一个 Android 应用程序,该应用程序执行无头登录到网站,然后从后续页面中抓取一些内容,同时维护登录会话。
我第一次使用HtmlUnit http://htmlunit.sourceforge.net/在一个普通的 Java 项目中,它运行得很好。但后来发现HtmlUnit与Android不兼容。
然后我尝试了JSoup http://jsoup.org/库通过向登录表单发送 HTTP“POST”请求来实现。但由于 JSoup 不支持 JavaScript,结果页面无法完全加载。
然后我被建议看看塞兰德机器人 http://selendroid.io/这实际上是一个android测试自动化框架。但我真正需要的是一个同时支持 JavaScript 和 Android 的 Html 解析器。我发现 Selendroid 很难理解,我什至不知道它是哪个依赖关系 http://search.maven.org/#search%7Cga%7C1%7Cselendroid to use.
- Selendroid 客户端
- Selendroid-独立
- Selendroid服务器
With 硒网络驱动程序 http://www.seleniumhq.org/,代码将如下所示简单。但是有人可以给我看一个类似的代码示例吗塞兰德机器人还有?
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 工作。但我找到了一种解决方法,只需使用 Android 内置的启用 JavaScript 的 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 字符串发送到 Html Handler 类中的处理 Html 方法。
class HtmlHandler {
@JavascriptInterface
@SuppressWarnings("unused")
public void handleHtml(String html) {
// scrape the content here
}
}
您可以使用像 Jsoup 这样的库从 html 字符串中抓取必要的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)