Selendroid 作为网络抓取工具

2024-02-21

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

并且,

  1. 要添加到我的 Gradle.Build 文件中的哪些依赖项?
  2. 要导入哪些 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(使用前将#替换为@)

Selendroid 作为网络抓取工具 的相关文章

  • BottomNavigationView - 如何获取选定的菜单项?

    我使用BottomNavigationView来切换片段 如何获取当前选定的菜单项 以防止重新打开片段 BottomNavigationView bottomNavigationView BottomNavigationView findV
  • Android 通知进度条冻结

    这是我正在使用的代码 http pastebin com 3bMCKURu http pastebin com 3bMCKURu 问题是 一段时间后 文件变得更重 通知栏下拉速度变慢 最后它就冻结了 你的通知太频繁了 这就是它冻结的原因 让
  • getItem 与 getItemAtPosition

    有两种方法可以获取列表视图中的选定项目 list getAdapter getItem position list getItemAtPosition position 我的问题是 哪一种是首选的做法 我见过人们同时使用这两种方法 您可以使
  • 与 Admob 广告单元 ID 混淆

    我跟着tutorial https developers google com admob android quick start在我的应用程序中创建广告横幅 到目前为止 这有效 我可以看到测试广告 但是 本教程指示我在两个不同的位置使用两
  • 如何将安卓手机从睡眠状态唤醒?

    如何以编程方式将 Android 手机从睡眠状态唤醒 挂起至内存 我不想获取任何唤醒锁 这意味着手机在禁用 CPU 的情况下进入 真正的 睡眠状态 我想我可以使用某种RTC 实时时钟 机制 有人有例子吗 Thanks 为了让Activity
  • 设置从 Facebook 登录获取用户电子邮件 ID 的权限

    我在用着Facebook 3 0 SDK对于安卓 我必须实施Facebook登录 我正在访问用户的基本信息 例如姓名 用户 ID 但我也想访问用户的电子邮件 我浏览了很多博客和论坛 但不知道该怎么做 我正在使用我自己的 android 按钮
  • 在 Google Analytics 中跟踪应用程序版本

    我正在使用谷歌分析模块 https marketplace appcelerator com apps 5081 2014113336 https marketplace appcelerator com apps 5081 2014113
  • 线程自动利用多个CPU核心?

    假设我的应用程序运行 2 个线程 例如渲染线程和游戏更新线程 如果它在具有多核 CPU 当今典型 的移动设备上运行 我是否可以期望线程在可能的情况下自动分配给不同的核心 我知道底层操作系统内核 Android linux内核 决定调度 我的
  • 如何查找 Android 设备中的所有文件并将它们放入列表中?

    我正在寻求帮助来列出 Android 外部存储设备中的所有文件 我想查找所有文件夹 包括主文件夹的子文件夹 有办法吗 我已经做了一个基本的工作 但我仍然没有得到想要的结果 这不起作用 这是我的代码 File files array file
  • Android 原理图内容提供程序库配置?

    Jake Wharton 在最近的一次演讲中提到了这个库 它看起来是避免大量样板文件的好方法 所以我尝试了一下 但没有任何成功 https github com SimonVT schematic https github com Simo
  • 请求位置更新参数

    这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
  • minHeight 有什么作用吗?

    在附图中 我希望按钮列与图像的高度相匹配 但我也希望按钮列有一个最小高度 它正确匹配图像的高度 但不遵守 minHeight 并且会使按钮向下滑动 我正在为按钮列设置这些属性
  • CookieManager.getInstance().removeAllCookie();不删除所有cookie

    我在应用程序的 onCreate 中调用 CookieManager getInstance removeAllCookie 我遇到了一个奇怪的问题 我看到 GET 请求中传递了意外的 cookie 值 事实上 cookie 值是一个非常非
  • 带有自定义阵列适配器的微调器不允许选择项目

    我使用自定义阵列适配器作为微调器 但是 当在下拉列表中选择一个项目时 下拉列表保留在那里 并且微调器不会更新 这是错误行为 与使用带有字符串的通用数组适配器相比 这是自定义类 我错过了什么吗 谢谢 public class Calendar
  • ROOM迁移过程中如何处理索引信息

    CODE Entity tableName UserRepo indices Index value id unique true public class GitHubRepo PrimaryKey autoGenerate true p
  • 如何在不更改手机语言的情况下更改Android应用程序语言?

    我希望用户在应用程序内选择一种语言 选择语言后 我希望字符串使用特定语言 如果我更改手机语言 那么我的应用程序将以设置的语言运行 我无法找到任何在不更改手机语言的情况下设置语言的方法 此外 一旦设置了语言 更改就应该反映出来 有人可以建议一
  • 如何创建像谷歌位置历史记录一样的Android时间轴视图?

    我想设计像谷歌位置历史这样的用户界面 我必须为我正在使用的应用程序复制此 UIRecyclerView 每行都是水平的LinearLayout其中包含右侧的图标 线条和视图 该线是一个FrameLayout具有圆形背景和半透明圆圈Views
  • 当手机旋转(方向改变)时如何最好地重新创建标记/折线

    背景 开发一个使用 Android Google Map v2 的本机 Android 应用程序 使用android support v4 app FragmentActivity 在 Android v2 2 上运行 客观的 在更改手机方
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • 在 Google 地图上绘制线条/路径

    我很长一段时间都在忙于寻找如何在 HelloMapView 中的地图上的两个 GPS 点之间画一条线 但没有运气 谁能告诉我该怎么做 假设我使用扩展 MapView 的 HelloMapView 我需要使用叠加层吗 如果是这样 我是否必须重

随机推荐

  • 在 Commodore 64 中绘制屏幕边框

    我的好奇心已经持续了 25 年 我很想了解其中的奥秘 在 Commodore 64 中 6569 VIC 无法寻址边界 您所能做的就是在中心区域 光标移动的区域 绘制像素 边框总是统一的 尽管你可以用 poke 53280 改变它的颜色 如
  • 在Mac OS上使用GCC为MS-DOS编译C程序(DOSBox)

    我在Mac OS X上的Snow Leopard下运行GCC 4 2 1 我想用它来编译我15年前写的一些旧的C C DOS游戏 以便我可以在下面运行它们DosBox http www dosbox com 为此 它们显然需要编译为 DOS
  • 两个列表,Python 中的比较速度更快

    我正在编写 python 2 7 脚本来比较两个列表 这些列表是通过读取文件内容从文件创建的 文件只是文本文件 没有二进制文件 文件 1 仅包含哈希值 某些明文单词的 MD5 和 文件 2 是 hash plain 列表具有不同的长度 从逻
  • Git 丢失更改[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 今天在使用 Git 的时候遇到了一些问题 我真的无法理解 我们的团队有一个私人 github 存储库 我从该共享存储库中提取了一些更改 完成
  • F# 中的受歧视联盟是什么以及 OOP 中我们有什么类型的替代方案

    我正在从 C 开始学习函数式编程 当然 由于我对 C 有着深入而详细的了解 我选择了我的第一个函数式语言 F 并尝试投入时间来学习它 现在我需要了解什么是受歧视的工会为什么它很重要以及为什么我们真正需要它 我确实做了很多研究 但导师 讲师
  • float() 的文字无效:0.000001,如何修复错误?

    我有一个包含 3 列数据的 csv 文件 我需要创建一个新的输出文件 其中包含原始文件第一列和第三列中的一组特定数据 第三列包含十进制值 我相信在这种情况下我已经使用了 python 的 float 功能 我尝试过以下代码 in file
  • 图神经网络中的梯度爆炸问题

    我有一个梯度爆炸问题 尝试了几天后仍无法解决 我在 TensorFlow 中实现了一个自定义消息传递图神经网络 用于根据图数据预测连续值 每个图表都与一个目标值相关联 图的每个节点由节点属性向量表示 节点之间的边由边属性向量表示 在消息传递
  • 存储后端如何影响 Datomic?

    我该如何选择 Datomic 的后端存储服务 选择 DynamoDB 而不是 Postgres 是一个偏好问题 还是每个选项都有不同的权衡 如果有 它们是什么 存储服务要求 Datomic 的存储服务一般应满足 3 个要求 实施键值存储语义
  • 如何计算三次贝塞尔曲线的控制点

    在执行三次贝塞尔曲线程序时我发现它使用端点为 10 10 0 和 0 1 0 其他控制点为 5 10 2 和 10 5 2 我不能了解他们是如何获得其他控制点的请帮我找到它们的任何公式或方法 Edit 如果你想让贝塞尔曲线平滑地通过N个点且
  • 构建 Cython 模块时如何覆盖 -DNDEBUG 编译标志

    我有一个 Cython 模块 通过调用 C 函数cdef extern C 函数有assert 声明 我想核实这些说法 但是 当我通过调用创建模块时python setup py build ext inplace GCC 总是被调用 DN
  • 背景:颜色在 IE8 中不起作用

    body background gray font family sans serif width 960px margin auto header background green border 10px solid black nav
  • 单词标记化与传统词形还原?

    我正在研究 NLP 预处理 在某些时候 我想实现一个上下文相关的词嵌入 作为辨别词义的一种方式 并且我正在考虑使用 BERT 的输出来实现这一点 我注意到 BERT 使用 WordPiece 标记化 例如 playing gt play i
  • Windows 7 64 位的 Moto G USB 调试问题

    我尝试搜索是否有任何建议 但找不到足够的建议 因此这个问题可以帮助我 我已经安装了 Motorola USB 驱动程序并启用了 USB 调试模式以及启用了 MTP 该设备在 Eclipse 中显示为可用状态不到一分钟 然后返回离线模式 我尝
  • iOS 应用内购买上的收据验证返回多笔交易

    沙盒模式下的应用内购买会返回同一产品 ID 上的多个交易 使用语言 Swift 4 0 func validateAppReceipt receipt Data let base64encodedReceipt receipt base64
  • 在 NativeScript 应用程序中与 TextField 交互时停止键盘覆盖

    使用用户可以输入输入的 NativeScript 应用程序视图时 本机应用程序键盘输入会覆盖TextField成分 虽然这不会阻止用户输入文本 但它会扰乱用户体验流程 并且从 UI 角度来看看起来很糟糕 如何让键盘不覆盖输入 而是像其他本机
  • SQL Server - 将变量传递给存储过程时遇到问题

    我知道这是一个基本问题 但我无法找到完成此任务的正确方法 我需要将变量传递给 SQL Server 2008 存储过程并返回查询 这是存储过程 CREATE PROCEDURE pOrders AS DECLARE enteredClien
  • 我可以在 Struts 中提供 SEO 友好的 url 吗?

    我想在我的应用程序中拥有 SEO 友好的 url 它将使用 Struts 1 2 在 java j2ee 中构建 我有一些分类如下 county countryname county state statename county state
  • PHP 如何发送原始 HTTP 数据包

    我想将原始 http 数据包发送到网络服务器并接收其响应 但我找不到方法来做到这一点 我对套接字缺乏经验 我发现的每个链接都使用套接字发送 udp 数据包 任何帮助都会很棒 看一下这个简单的例子fsockopen手册页 http docs
  • 动画元素替换[重复]

    这个问题在这里已经有答案了 请告诉我如何使容器根据子元素的高度平滑地增加和减少高度 我的代码可以在没有动画的情况下工作 setTimeout gt document getElementById page1 style display no
  • Selendroid 作为网络抓取工具

    我打算创建一个 Android 应用程序 该应用程序执行无头登录到网站 然后从后续页面中抓取一些内容 同时维护登录会话 我第一次使用HtmlUnit http htmlunit sourceforge net 在一个普通的 Java 项目中