抓取微博数据:使用HtmlUnitDriver实现模拟登陆

发表于:2017-8-23 11:32

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:神经骚栋    来源:51Testing软件测试网采编

  
   前言
  作为小白的我而言,对于各种网络数据抓取也不少了,但是在抓取过程之中坑点也不少的,这里就分享一下对于需要登陆的网页的处理,我们整体思路是这样的,我们通过对该网站的登录之后拿到该网站的Cookie,然后拿着获取到的Cookie再去我们想要爬取的地址进行数据爬取。
  Selenium简介
  Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。
  而我用到的HtmlUnitDriver是Selenium众多工具中一个基于HtmlUnit的无界面实现,即使用HtmlUnit时并不会打开真实的浏览器,而是在内存中执行代码,因此运行速度很快,但是对JavaScript的支持不够好,当页面上有复杂的JavaScript元素时,经常捕捉不到。
  当我们需要Selenium的时候,我们可以添加Maven依赖.如下所示。
  <dependency>
      <groupId>org.seleniumhq.selenium</groupId>
      <artifactId>selenium-java</artifactId>
      <version>3.4.0</version>
  </dependency>
  HtmlUnitDriver的鼠标和键盘事件
  我们平常在普通一个网站登录的时候都会使用到我们的键盘和鼠标来进行一系列的用户交互操作.那么我们在HtmlUnitDriver该如何实现键盘的输入和鼠标的点击呢?在其实现的接口类WebDeriver中有一个专门的类来负责实现这些测试场景,那就是 Actions 类,在使用该类的过程中会配合使用到 Keys 枚举以及 Mouse、 Keyboard、CompositeAction 等类。下面我就分别简单介绍鼠标事件和键盘事件的实现。
  鼠标事件
  ●鼠标左键点击
  Actions action = new Actions(driver);
  action.click();// 鼠标左键在当前停留的位置做单击操作 
  action.click(driver.findElement(By.name(element)))// 鼠标左键点击指定的元素
  ●鼠标右键点击
  Actions action = new Actions(driver); 
  action.contextClick();// 鼠标右键在当前停留的位置做单击操作 
  action.contextClick(driver.findElement(By.name(element)))// 鼠标右键点击指定的元素
  ●鼠标双击操作
  Actions action = new Actions(driver); 
  action.doubleClick();// 鼠标在当前停留的位置做双击操作 
  action.doubleClick(driver.findElement(By.name(element)))// 鼠标双击指定的元素
  ●鼠标拖拽动作
  Actions action = new Actions(driver); 
  // 鼠标拖拽动作,将 source 元素拖放到 target 元素的位置。
  action.dragAndDrop(source,target);
  // 鼠标拖拽动作,将 source 元素拖放到 (xOffset, yOffset) 位置,其中 xOffset 为横坐标,yOffset 为纵坐标。
  action.dragAndDrop(source,xOffset,yOffset);
  ●释放鼠标
  Actions action = new Actions(driver); 
  action.release();// 释放鼠标

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号