我打算创建一个Android应用程序,执行一个无头登录到一个网站,然后刮一些内容从后续的网页,同时保持登录会话。
我首先在一个普通的Java项目中使用了HtmlUnit,它运行得很好。但后来发现HtmlUnit与安卓系统不兼容。
然后,我通过向登录表单发送HTTP请求来尝试JSoup库。但是结果页面并没有完全加载,因为JSoup不支持JavaScript。
然后,有人建议我看一下塞伦德鲁德,它实际上是一个安卓测试自动化框架。但我真正需要的是一个同时支持JavaScript和Android的Html解析器。我发现Selendroid很难理解,我甚至不知道要使用哪个依赖关系。
对于硒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();而且,
发布于 2015-08-26 18:24:47
不幸的是我没能让Selendroid工作。但我找到了一个解决办法,只使用内置在WebView中的、启用了JavaScript的Android系统来抓取动态内容。
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字符串发送到handleHtml类中的HtmlHandler方法。
class HtmlHandler {
@JavascriptInterface
@SuppressWarnings("unused")
public void handleHtml(String html) {
// scrape the content here
}
}您可以使用一个库(如Jsoup )从html字符串中抓取必要的内容。
发布于 2015-08-21 16:18:35
我从来没有使用过Selendroid,所以我对此不太确定,但是通过网络搜索,我发现了这个示例,根据它,我想您从Selenium到Selendroid的代码转换应该是:
翻译代码(在我看来)
public class MobileWebTest {
private SelendroidLauncher selendroidServer = null;
private WebDriver driver = null;
@Test
public void doTest() {
driver.get("https://mail.google.com/");
WebElement email = driver.findElement(By.id("email")).sendKeys(myEmail);
WebElement password = driver.findElement(By.id("pass")).sendKeys(pass);
WebElement button = driver.findElement(By.id("signIn")).click();
driver.quit();
}
@Before
public void startSelendroidServer() throws Exception {
if (selendroidServer != null) {
selendroidServer.stopSelendroid();
}
SelendroidConfiguration config = new SelendroidConfiguration();
selendroidServer = new SelendroidLauncher(config);
selendroidServer.launchSelendroid();
DesiredCapabilities caps = SelendroidCapabilities.android();
driver = new SelendroidDriver(caps);
}
@After
public void stopSelendroidServer() {
if (driver != null) {
driver.quit();
}
if (selendroidServer != null) {
selendroidServer.stopSelendroid();
}
}
},您需要在项目中添加什么?
似乎您必须将Selendroid standalone jar file添加到您的项目中。如果您对如何在Android项目中添加外部jar有疑问,您可以看到以下问题:如何在Android项目中使用外部JAR?
在这里您可以下载jar file:jar文件
而且,仅仅将jar file添加到项目中似乎还不够。您也应该添加您所拥有的独立版本的selendroid-client jar file。
您可以从这里下载:客户端jar文件
我希望这会对你有帮助!
发布于 2015-08-21 09:15:05
我建议您使用WebdriverIO,因为您希望使用Javascript。它使用NodeJs,因此很容易要求其他插件来抓取HTML。
Appium也是一个替代方案,但它更专注于前端测试。
https://stackoverflow.com/questions/30058692
复制相似问题