当前位置:网站首页 > Java教程 > 正文

java自动爬虫教程



  • 自动化测试
    • Selenium是最受欢迎的Web应用程序自动化测试工具之一。
    • 通过学习Selenium,可以编写自动化测试脚本,用于自动执行各种任务,例如验证功能、测试用户界面、模拟用户交互
    • 大大提高测试效率,减少手动测试的工作量。
  • 网络爬虫
    • Selenium可以用于构建网络爬虫,从网页上提取数据。通过模拟用户的交互行为,如点击按钮、填写表单等
    • Selenium能够获取页面上动态生成的内容,而且可以处理JavaScript渲染的网页。
    • 这对于需要爬取动态内容的网站很有帮助。
  • 自动化操作
    • Selenium可以用于自动化各种Web应用程序的操作,例如批量提交表单、自动化下载文件、自动化填写信息等。
    • 可以减少重复性的任务,并提高工作效率。
  • 官网:

  注意:大版本号要保持一致,否则可能出现兼容性问题(若找不到响应版本,降浏览器版本号)

  需要修改你的驱动路径

  • 比较常用的是id选择器和xpath选择器
定位方法Java语言实现实例 id 定位 driver.findElement(By.id(“id的值”)); name定位 driver.findElement(By.name(“name的值”)); 链接的全部文字定位 driver.findElement(By.linkText(“链接里面的的全部文字”)); 链接的部分文字定位 driver.findElement(By.partialLinkText(“链接里面的部分文字”)); css 方式定位 driver.findElement(By.cssSelector(“css表达式”)); xpath 方式定位 driver.findElement(By.xpath(“xpath表达式”)); Class 名称定位 driver.findElement(By.className(“class属性”)); TagName 标签名称定位 driver.findElement(By.tagName(“标签名称”));

  案例:搜索当前北京时间

  • XPath(XML Path Language)是一种在XML文档中查找信息的语言,也可以用于HTML
  • XPath提供了非常强大的定位能力,可以定位到几乎任何元素。
  • 语法案例(更多语法搜索博文资料 )
表达式描述实例案例说明 nodename 选取nodename节点的所有子节点 xpath(‘//div’) 选取了div节点的所有子节点 / 从根节点选取 xpath(‘/div’) 从根节点上选取div节点 // 选取所有的当前节点,不考虑他们的位置 xpath(‘//div’) 选取所有的div节点 . 选取当前节点 xpath(‘https://www.cnblogs.com/chenyanbin/p//div’) 选取当前节点下的div节点 .. 选取当前节点的父节点 xpath(‘..’) 回到上一个节点 @ 选取属性 xpath(’//@class’) 选取所有的class属性
  • HTML文档本身就是一个标准的XML页面,可以使用Xpath 的用法来定位页面元素
  • 有两种路径定位方式
    • 绝对路径
      • 以 "/" 开头, 让xpath 从文档的根节点开始解析
      • 如果页面结构发生改变,改路径也随之失效,必须重新配置
    • 相对路径
      • 以"https://" 开头, 让xpath 从文档的任何元素节点开始解析
      • 推荐采用这个方式,结合适合的元素,则通用性更好
  • 注意事项
    • webdriver会将整个页面的元素扫描定位所需要的元素,如果大量使用xpath做元素定位的话, 脚本的执行速度可能会稍慢

  • Selenium WebDriver是一个浏览器自动化框架,允许执行Web应用程序上的操作,就如同一个真实用户一样。
  • 在Selenium 4.x版本中,WebDriver API提供了一系列与浏览器进行交互的方法,常见API如下
方法描述 get(String url) 访问目标 url 地址,打开网页 getCurrentUrl() 获取当前页面 url 地址 getTitle() 获取页面标题 getPageSource() 获取页面源代码 close() 关闭浏览器当前打开的窗口 quit() 关闭浏览器所有的窗口 findElement(by) 查找单个元素 findElements(by) 查到元素列表,返回一个集合 getWindowHandle() 获取当前窗口句柄 getWindowHandles() 获取所有窗口的句柄
  • 是 Selenium WebDriver API 中的一个核心接口,
  • 代表了DOM(Document Object Model)树中的一个HTML元素。
  • 通过 对象,可以与页面上的元素进行交互,例如点击按钮、输入文本、选择选项、检查元素的属性或状态等。
  • 通常会通过 WebDriver 的 或 方法来定位页面上的元素,获取 对象。
  • 这些方法会返回一个或多个 对象,对象代表了与给定选择器匹配的DOM元素。
方法说明 click 点击对象 sendKeys 在对象上模拟按键输入 clear 清除对象输入的文本内容 submit 提交,比如表单对象 getAttribute 获取元素的指定属性 getText 用于获取元素的文本信息
  • 需求
    • 浏览器操作网页,有前进、后退,不同网页直接切换,窗口最大化、刷新等
    • 通过Selenium的api完成上述的操作案例
方法说明 back 模拟浏览器后退按钮 forward 模拟浏览器前进按钮 refresh 刷新页面(F5) maximize 浏览器最大化 setSize 浏览器宽高 manage( ).window( ).setSize( ) 设置浏览器的大小
  • 鼠标操作主要是通过类来实现的,该类提供了一系列模拟鼠标操作的方法
  • 包括有 右击、双击、悬停、拖动等
方法说明 contextClick( ) 右击 clickAndHold( ) 鼠标点击并控制 doubleClick( ) 双击 dragAndDrop( ) 拖动 release( ) 释放鼠标 perform( ) 执行所有Actions中存储的行为
  • 单击操作
  • 双击操作
  • 右键操作
  • 悬停操作
  • 拖拽操作
  • 利用和类来模拟键盘操作,包括文本输入、按键和组合键序列,增强自动化脚本的用户交互能力
  • 枚举提供了方便的表示键盘上按键的方法,而类则用于构建复杂的交互序列。
  • 这两者结合,允许在Web自动测试中模拟几乎任何类型的键盘操作。
  • 键盘操作示例
    • 发送普通文本
      • 可以使用的方法来向页面元素发送普通文本。
      • 例如,向一个输入框发送文本“Hello, Selenium!”:
    • 发送特殊字符
    sendKeys 使用类中的常量,可以发送特殊字符或按键事件,sendKeys接收可变参数    
    例如,发送回车键:
    • 模拟组合键操作  
      这需要使用类来构建一系列动作,并通过方法执行。    
    Selenium还支持模拟组合键操作,如Ctrl+C、Alt+F4等。    
    使用快捷键Ctrl+Alt+a,可以通过下面语句来实现:    
    keyDown(Key)方法的调用,如没有接着调用keyUp(Key)或者sendKeys(Keys.NULL) 来释放,按键将一样保持按住状态
  • 注意事项
    • 在发送键盘操作之前,请确保目标元素是可交互的(即可见且可点击)。
    • 如果元素在发送键盘操作之前处于隐藏或不可交互状态,可能会导致测试失败。
    • 在使用组合键时,请注意按键的顺序和释放的顺序,如果顺序不正确,可能会导致测试行为不符合预期。
  • 不同操作系统的键盘说明
  • Web应用通常通过异步加载(如Ajax)来动态更新页面内容,页面元素可能不是立即可用的。
  • 当自动化测试脚本尝试访问或操作这些元素时,如果没有等待机制,可能会遇到定位失败、元素状态不正确等异常
  • Selenium4等待主要解决以下问题:
    • 元素加载延迟
      • 当页面上的某些元素是通过异步请求(如Ajax)加载的,这些元素可能不会立即出现在DOM中。
      • 网络波动或服务器响应延迟,页面上的某些内容可能需要一些时间才能加载。
      • 如果没有等待机制,测试脚本可能会在元素实际可用之前访问它,导致定位失败。
    • 依赖关系
      • 测试脚本中的操作可能依赖于前一步的结果或内容。
      • 例如,一个表单提交后,可能需要等待新页面加载完成才能继续执行后续操作。
    • 页面更新
      • JavaScript可能会动态更改页面内容,如添加、删除或修改元素。
      • 如果没有等待,测试脚本可能会错过这些变化,导致测试失败。
  • Selenium 等待元素出现的方式有以下三种
    • 强制等待
      • 即线程休眠,在代码中强制当前正在执行的线程休眠(暂停执行)不管元素有没出现都固定时间
      • 前面案例操作中已经多次使用
    • 显式等待(Explicit Wait)
      • 通俗说就是死等,不灵活的等待,在指定的时间内一定要等到某个元素的出现或可操作的状态
      • 如果等不到,就一直等,直到在规定的时间之内都要操作的元素仍没找到,就抛出异常
      • 可以针对特定的元素或一组元素进行等待,提供了更灵活的等待机制,可以等待复杂的条件。
    • 隐式等待 (Implicit Wait)
      • 设置全局等待时间,全部查找都会生效,驱动初始化后就可以配置,在指定时间内轮询DOM,直到找到元素或超时。
      • 一旦设置,在整个WebDriver对象实例的生命周期内都有效。
      • 适用于等待整个页面加载完毕。

  实际工作中,可以使用谷歌一款录屏插件,直接稍微修改下代码即可使用自动化操作

  插件名称:Selenium IDE

  • 上一篇: java adt 教程
  • 下一篇: appium教程 java
  • 版权声明


    相关文章:

  • java adt 教程2024-12-19 09:58:02
  • java引号教程2024-12-19 09:58:02
  • java使用教程试卷2024-12-19 09:58:02
  • java的fx教程2024-12-19 09:58:02
  • java教程4372024-12-19 09:58:02
  • appium教程 java2024-12-19 09:58:02
  • 指令商店教程java2024-12-19 09:58:02
  • java时钟设计教程2024-12-19 09:58:02
  • java变量设置教程2024-12-19 09:58:02
  • java编程课教程2024-12-19 09:58:02