Selenium 的基本操作你知道哪些?

news2025/4/8 23:57:58

1. 前言

  今天的推文,我们就来说说看,怎么实现模拟真人去打开微信读书网站。

  2.需求分析和准备

  整体的需求大致可以分为以下步骤:

  ·打开chrome浏览器

  · 打开百度网页

  · 搜索“微信读书”

  · 点击进入“微信读书”官网

  · 搜索关键词“长安的荔枝”

  · 点击进入“长安的荔枝”书本

  · 翻阅书籍前五章内容

  在写脚本之前,我们需要准备好社区版AirtestIDE(目前最新版为1.2.17),设置好chrome.exe地址和对应的driver即可。

  3. 脚本实现与运行效果

  3.1 脚本运行效果

  在运行过程中,我们将每次的搜索结果通过读取url链接的方式去实现页面跳转,在进入到书籍阅读界面时,根据读取到的页面高度、文档高度、去计算可滑动高度,实现滑动阅读的操作。并且根据页面的JS距离去判断是否已经滑动到文档底部,从而执行点击下一章的操作。

  先来看下我们整体的运行效果:

3.2 完整代码分享

  这里也附上完整的示例代码给大家参考,有需要的同学可以自取学习哦:

 

# -*- encoding=utf8 -*-__author__ = "Airtest"
  from airtest.core.api import *from selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom airtest_selenium.proxy import WebChromefrom selenium.webdriver.common.by import By
  # 创建一个实例driver = WebChrome()driver.implicitly_wait(20)
  def start_selenium():
      driver.get("https://www.baidu.com/")
      # 输入搜索关键词并提交搜索
      search_box = driver.find_element_by_name('wd')
      search_box.send_keys('微信读书')
      search_box.submit()
      # 获取搜索结果并打开新页面
      open_new_page()
      # 滚动页面并阅读章节
      read_chapters()
  def open_new_page():
      # 使用XPath查找文本为 "微信读书" 的元素并点击
      try:
          element = driver.find_element_by_xpath("//div[@id='content_left']/div[@id='1']/div[@class='c-container']/div[1]/h3[@class='c-title t t tts-title']/a")
      except Exception as e:
          element = driver.find_element_by_xpath('//*/text()[normalize-space()="微信读书"]/parent::*')
      element.click()
      # 获取所有窗口句柄
      window_handles = driver.window_handles
      # 切换到新打开的窗口
      driver.switch_to.window(window_handles[1])
      # 获取新页面的链接
      new_page_url = driver.current_url
      # 打印新页面的链接
      print(f"新页面的链接: {new_page_url}")
      driver.get(new_page_url)
      #点击搜索书籍《长安的荔枝》
      driver.find_element_by_xpath("//input[@type='text']").click()
      driver.find_element_by_xpath("/html/body/div[7]/div/div/div[2]/div/input").send_keys("长安的荔枝")
      driver.find_element_by_xpath("/html/body/div[7]/div/div/div[2]/span[2]").click()
      # 获取a标签的URL以及书籍简介
      search_box = driver.find_element_by_xpath("/html/body/div[7]/div/div[3]/div/ul/li/a")
      print(f"a标签的文本: {search_box.text}")
      url = search_box.get_attribute('href')
      # 打印URL
      print(f"URL: {url}")
      driver.get(url)  # 请求搜索链接-跳转
  #开始阅读def read_chapters():
      #切换上下滚动阅读模式
      button = driver.find_element(By.CSS_SELECTOR,"button[title='切换到上下滚动阅读'].readerControls_item.isHorizontalReader")
      button.click()
      for i in range(5):  # 阅读章节5章
          # 滚动到页面最下方
          scroll_to_bottom()
          sleep(5)
          # 点击下一章节按钮
          next_chapter = driver.find_element(By.XPATH,"//div[@class='readerFooter']/div/button[@class='readerFooter_button']")
          next_chapter.click()
  #滑动书籍def scroll_to_bottom():
      while True:
          is_bottom = driver.execute_script('return (window.innerHeight + window.pageYOffset) >= document.documentElement.scrollHeight;')
          # 判断是否滚动到屏幕最底部
          if not is_bottom:
              # 获取页面高度
              heig_ = driver.execute_script("return document.body.scrollHeight;")
              # 获取当前页面底部距离顶部的距离
              next_ = driver.execute_script("return (window.innerHeight + window.pageYOffset);")
              # 计算滚动距离
              p_num = heig_ / 1000
              print(heig_ / 1000)
              # 滚动到页面最下方
              driver.execute_script(f"window.scrollTo(0, {p_num + next_});")
              sleep(2)
          else:
              print('已滚动到屏幕最底部')
              break
  #管理 WebDriver 的生命周期class SeleniumDriver:
      def __enter__(self):
          return driver
      def __exit__(self, exc_type, exc_val, exc_tb):
          pass
  if __name__ == "__main__":
      with SeleniumDriver():
          start_selenium()

3.2 重要知识点

  1)返回当前页面的文档在垂直方向上的高度

driver.execute_script("return document.body.scrollHeight;")

 2)获取当前页面可见区域的高度和页面滚动距离

driver.execute_script("return (window.innerHeight + window.pageYOffset);")

 3) 判断页面是否已经滚动到底部

driver.execute_script('return (window.innerHeight + window.pageYOffset) >= document.documentElement.scrollHeight;')

4)管理WebDriver的生命周期

  如果不需要完成任务后就关闭浏览器的话,可以在exit的时候直接pass处理,如果需要立即关闭浏览器的话,可以选择在exit函数内填入driver.close()

 class SeleniumDriver:
      def __enter__(self):
          return driver
      def __exit__(self, exc_type, exc_val, exc_tb):
          pass

 

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1910150.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浮动刹车盘和固定刹车盘有什么区别

在讨论刹车系统的设计理念时,浮动和固定刹车盘无疑是两个重要的分支。 它们各自拥有独特的设计哲学、工作原理以及适用场景,这些差异直接影响到了制动系统的性能和耐久性。 浮动刹车盘和固定刹车盘在设计和工作原理上有显著的区别,主要体现在…

现代化木工装备建设新颖校园木工创客室

校园木工创客室是一个集木工制作、创意设计、科技融合与教育实践于一体的多功能空间。它为学生提供了一个动手实践、创新创造的平台,旨在培养学生的动手能力、创新思维、解决问题的能力以及团队协作能力。 木工创客室的设备选择应综合考虑需求、预算、品牌、质量、安…

【源码下载】瓦房店农村电商大数据平台模板

技术详细实现可在评论区留言。 概述 用 echarts 和 jquery 实现的大屏模板效果。 部分代码展示,访问 dt.sim3d.cn 获取源码: (function($){$.extend({initMapChartPath : function(options){var defs {domId : ,mapName:china,mapCenter:["5…

saas lims系统:适合中小检测机构的实验室管理系统

目前市面上的LIMS系统分为两种:一种是传统的LIMS系统,一次性买断,配置服务器,成本相对来说是比较高的。还有一种就是以白码LIMS云平台为代表的,基于SaaS模式的LIMS系统。白码LIMS系统提供saas模式购买,帮助…

网络安全设备——探针

网络安全设备探针是一种专门用于网络安全领域的工具,它通过对网络流量进行监控和分析,帮助发现和防止网络攻击。以下是对网络安全设备探针的详细解释: 定义与功能 定义:网络安全设备探针是一种设备或软件,它通过捕获…

第58期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

短信群发精准营销策略全解析

短信群发作为传统而高效的营销手段,其效果却常因缺乏精准性而大打折扣。要实现短信群发的精准营销,关键在于两大核心要素与选择合适的平台。 一、精准营销的两大核心 1.数据细分,精准定位 在启动短信群发前,企业需…

基于JAVA+SpringBoot+Vue的社区普法平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 社区普法平台旨在为社…

【结构性型模式-适配器模式】

定义 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。 适配器模式分为类适配器模式和对象适配器模式,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结…

道达尔远景首个光储项目圆满收官,助力纺织业绿色转型

近日,由道达尔远景(TEESS)开发、设计、建设并运营的德州夏仁津和纺织分布式光储项目顺利并网发电。通过光伏发电与储能系统的有机结合,不仅满足了纺织厂的用电需求,也为纺织业的绿色转型注入了新动力。 我国是全球最大…

如何使用ParaView可视化工具来绘制点云数据的3D点云图像(亲测好用)

如何使用ParaView来绘制点云数据。以下是如何将你的数据导入ParaView并进行可视化的步骤 一、准备数据 首先,你需要将你的数据转换为ParaView可以读取的格式。ParaView支持多种文件格式,其中最常见的是.vtk和.csv格式。为了简单起见,这里我…

【Gradle】(三)详细聊聊依赖管理:坐标、依赖配置、依赖传递、依赖冲突

文章目录 1.概述2.依赖管理2.1.坐标2.2.依赖的基本概念2.3.依赖配置(Dependency configurations)2.3.1.依赖路径2.3.2.依赖配置与依赖路径的关联 2.4.依赖传递2.4.1.准备工作2.4.2.运行时依赖传递jar包生成与依赖配置依赖树打印使用 Dependency Analyzer…

mybatilsplaus 常用注解

官网地址 baomidou注解配置

数据高效交互丨DolphinDB Redis 插件使用指南

DolphinDB 是一个高性能的分布式数据库。通过 Redis 插件,DolphinDB 用户可以轻松地与 Redis 数据库进行交互。用户不仅可以从 DolphinDB 向 Redis 发送数据,实现高速的数据写入操作;还可以从 Redis 读取数据,将实时数据流集成到 …

关于嵌入式系统中的LED控制程序的一篇爽文

嵌入式系统中的LED控制程序 在嵌入式系统中控制LED是一个很常见的任务,可以用于指示状态、显示信息等。我们将使用C语言编写一个简单的LED控制程序,该程序将控制一个虚拟的LED,但可以根据需要将其扩展到实际的硬件上。 准备工作 在开始之前…

灯塔音乐网,灯塔音乐下载官网

音乐,这个无形的艺术,自古以来就伴随着人类的生活,成为了我们表达情感、沟通思想、寻求共鸣的重要桥梁。在我们的日常生活中,音乐无处不在,它不仅仅是一种娱乐方式,更是一种生活态度,一种精神寄…

从零开始做题:emoji

题目 给出一张图片 解题 from PIL import Image import random # 读取txt文件 with open("rgb.txt", "r") as file: lines file.readlines() # 跳过第一行(包含尺寸信息) lines lines[1:] # 提取RGB颜色值 colors…

职升网:初中毕业如通过什么方式考中专学历?

对于许多初中毕业生而言,想要进一步提升自己的学历,中专是一个不错的选择。考取中专学历需要遵循一定的步骤,以下是具体的指导: 了解中专入学要求: 首先,你需要详细了解不同中专学校的入学要求。这通常包…

ubuntu下aarch64-linux-gnu(交叉编译) gdb/gdbserver

ubuntu下aarch64-linux-gnu(交叉编译) gdb/gdbserver gdb是一款开源的、强大的、跨平台的程序调试工具。主要用于在程序运行时对程序进行控制和检查,如设置断点、单步执行、查看变量值、修改内存数据等,从而帮助开发者定位和修复代码中的错误。 gdbserve…

熬了一晚上,我从零实现了 Transformer 模型,把代码讲给你听

自从彻底搞懂Self_Attention机制之后,笔者对Transformer模型的理解直接从地下一层上升到大气层,瞬间打通任督二脉。夜夜入睡之前,那句柔情百转的"Attention is all you need"时常在耳畔环绕,情到深处不禁拍床叫好。于是…