首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selendroid作为网络刮刀

Selendroid作为网络刮刀
EN

Stack Overflow用户
提问于 2015-05-05 16:41:44
回答 3查看 4.1K关注 0票数 14

我打算创建一个Android应用程序,执行一个无头登录到一个网站,然后刮一些内容从后续的网页,同时保持登录会话。

我首先在一个普通的Java项目中使用了HtmlUnit,它运行得很好。但后来发现HtmlUnit与安卓系统不兼容。

然后,我通过向登录表单发送HTTP请求来尝试JSoup库。但是结果页面并没有完全加载,因为JSoup不支持JavaScript。

然后,有人建议我看一下塞伦德鲁德,它实际上是一个安卓测试自动化框架。但我真正需要的是一个同时支持JavaScript和Android的Html解析器。我发现Selendroid很难理解,我甚至不知道要使用哪个依赖关系

  • selendroid客户端
  • 硒素-独立
  • selendroid服务器

对于硒WebDriver,代码将非常简单,如下所示。但是,有人能给我看一个类似的Selendroid代码示例吗?

代码语言:javascript
复制
    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();

而且,

  1. 要向我的Gradle.Build文件添加哪些依赖项?
  2. 要导入哪些Selendroid库?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-26 18:24:47

不幸的是我没能让Selendroid工作。但我找到了一个解决办法,只使用内置在WebView中的、启用了JavaScript的Android系统来抓取动态内容。

代码语言: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字符串发送到handleHtml类中的HtmlHandler方法。

代码语言:javascript
复制
class HtmlHandler {
        @JavascriptInterface
        @SuppressWarnings("unused")
        public void handleHtml(String html) {
            // scrape the content here

        }
    }

您可以使用一个库(如Jsoup )从html字符串中抓取必要的内容。

票数 2
EN

Stack Overflow用户

发布于 2015-08-21 16:18:35

我从来没有使用过Selendroid,所以我对此不太确定,但是通过网络搜索,我发现了这个示例,根据它,我想您从SeleniumSelendroid的代码转换应该是:

翻译代码(在我看来)

代码语言:javascript
复制
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 filejar文件

而且,仅仅将jar file添加到项目中似乎还不够。您也应该添加您所拥有的独立版本的selendroid-client jar file

您可以从这里下载:客户端jar文件

我希望这会对你有帮助!

票数 1
EN

Stack Overflow用户

发布于 2015-08-21 09:15:05

我建议您使用WebdriverIO,因为您希望使用Javascript。它使用NodeJs,因此很容易要求其他插件来抓取HTML。

Appium也是一个替代方案,但它更专注于前端测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30058692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档