android - Selendroid 作为网络抓取工具

标签 android selenium web-scraping selendroid

我打算创建一个 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();

还有,

  1. 要将哪些依赖项添加到我的 Gradle.Build 文件中?
  2. 要导入哪些 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/

相关文章:

Android 内存泄漏 - 无法正确解除分配位图,内存不足错误 - 位图大小超出 VM 预算 [Mono Android]

c# - Web API启动流程

java - 无法读取 VR 路径注册表

Python 抓取和读取带有请求的加密返回

javascript - 用 R 抓取 javascript

java - URI 和 Uri 类有什么区别

android - JobScheduler 作业在进程被终止后被取消

android - 如何获取 AlertDialog 标题?

python - chromedriver 的 python-selenium 绑定(bind)错误

python - 如何让 Scrapy 在日志中根据下载请求显示用户代理?