当前位置: 首页 > news >正文

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

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')# 打印URLprint(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_ / 1000print(heig_ / 1000)# 滚动到页面最下方driver.execute_script(f"window.scrollTo(0, {p_num + next_});")sleep(2)else:print('已滚动到屏幕最底部')break#管理 WebDriver 的生命周期class SeleniumDriver:def __enter__(self):return driverdef __exit__(self, exc_type, exc_val, exc_tb):passif __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 driverdef __exit__(self, exc_type, exc_val, exc_tb):pass

 

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

 

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

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 短视频矩阵系统源代码开发---多种剪辑逻辑再次升级
  • 技术赋能政务服务:VR导视与AI客服在政务大厅的创新应用
  • [终端安全]-5 移动终端之操作系统安全
  • 数据库第三次作业
  • Java中toString()方法的理解使用及如何通过IDEA快速自动调用,重写toString()方法
  • Leetcode—97. 交错字符串【中等】
  • Doris数仓的最佳拍档ETLCloud数据集成平台
  • Git 快速上手
  • 下半年交火点:智驾全国都能开,智舱多模态大模型
  • gen_circle_contour_xld 创建XLD轮廓对应于圆或圆弧。
  • 【机器学习】机器学习与自然语言处理的融合应用与性能优化新探索
  • iOS 应用内存超过多少会收到系统内存警告 ?
  • Linux服务监控自动巡检脚本--推送钉钉告警
  • Python 插入、替换、提取、或删除Excel中的图片
  • 【初阶数据结构】深入解析队列:探索底层逻辑
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • [译] 怎样写一个基础的编译器
  • cookie和session
  • HTML5新特性总结
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • redis学习笔记(三):列表、集合、有序集合
  • TCP拥塞控制
  • webpack4 一点通
  • 阿里云前端周刊 - 第 26 期
  • 百度小程序遇到的问题
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • ------- 计算机网络基础
  • 检测对象或数组
  • 简单易用的leetcode开发测试工具(npm)
  • 如何设计一个比特币钱包服务
  • 使用 QuickBI 搭建酷炫可视化分析
  • 说说动画卡顿的解决方案
  • 微信公众号开发小记——5.python微信红包
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 交换综合实验一
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​如何使用QGIS制作三维建筑
  • # include “ “ 和 # include < >两者的区别
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #if 1...#endif
  • #pragma once与条件编译
  • #QT项目实战(天气预报)
  • #stm32整理(一)flash读写
  • (2)STL算法之元素计数
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (转)JAVA中的堆栈
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl