Android Selendroid作为web刮刀
我打算创建一个Android应用程序,它可以无头登录一个网站,然后在维护登录会话的同时从后续页面中删除一些内容 我第一次在一个普通的Java项目中使用它,它工作得很好。但后来发现HtmlUnit与Android不兼容 然后,我通过向登录表单发送HTTP“POST”请求来尝试使用该库。但由于JSoup不支持JavaScript,因此生成的页面无法完全加载 然后,有人建议我看看哪一个是真正的android测试自动化框架。但我真正需要的是一个支持JavaScript和Android的Html解析器。我发现Selendroid很难理解,我甚至不知道该用哪个Android Selendroid作为web刮刀,android,selenium,web-scraping,selendroid,Android,Selenium,Web Scraping,Selendroid,我打算创建一个Android应用程序,它可以无头登录一个网站,然后在维护登录会话的同时从后续页面中删除一些内容 我第一次在一个普通的Java项目中使用它,它工作得很好。但后来发现HtmlUnit与Android不兼容 然后,我通过向登录表单发送HTTP“POST”请求来尝试使用该库。但由于JSoup不支持JavaScript,因此生成的页面无法完全加载 然后,有人建议我看看哪一个是真正的android测试自动化框架。但我真正需要的是一个支持JavaScript和Android的Html解析器。我
- selendroid客户端
- selendroid单机版
- 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();
而且
我建议您使用WebDrivero,因为您想使用Javascript。 它使用NodeJs,因此很容易需要其他插件来删除HTML
Appium也是一种替代方案,但它更注重前端测试。我从未使用过
Selendroid
,所以我不太确定,但通过网络搜索,我发现了这一点,根据它,我想您从Selenium
到Selendroid
的代码翻译应该是:
翻译代码(在我看来)
您需要在项目中添加哪些内容
似乎您必须将Selendroid独立jar文件添加到项目中。如果您对如何在Android项目中添加外部jar有疑问,您可以看到以下问题:
您可以在这里下载jar文件
:
此外,仅仅将jar文件添加到项目中似乎是不够的。您还应该添加您拥有的standalone版本的selendroid客户端jar文件
您可以从这里下载:
我希望它会对你有帮助 不幸的是,我没有让Selendroid工作。但我找到了一个解决办法,可以通过使用Android内置的WebView和启用JavaScript来抓取动态内容
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字符串中提取必要的内容。是否需要启动/停止Selendroid服务器才能使用驱动程序?正如我在回答中所说,我从未使用过Selendroid
,我只是收集了所有的信息并把它们放在一个答案中,所以我不能确认我所说的是真的,但这似乎是必要的,正如官方页面所说:运行selendroid独立服务器
。这里有我在视频演示中看到的源代码:这似乎引发了错误:错误:任务执行失败“:app:preDexDebug”。>com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:process'command'/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/bin/Java''以非零出口值结束。请尝试以下问题:,我已经尝试了所有这些解决方案,但都没有成功。你确定WebDrivero可以用于android web报废WebDrivero可以处理android以确保此解决方案有效,但当我尝试在具有多个重定向的网站上实施此解决方案时,即使我比较url,重定向会将页面转到并通过同一url,我使用过计数器,但似乎不知道页面何时完全加载。
class HtmlHandler {
@JavascriptInterface
@SuppressWarnings("unused")
public void handleHtml(String html) {
// scrape the content here
}
}