selenium官网文档阅读总结(day 4)
1.selenium的工作原理
selenium的工作原理涉及以下主要组件和步骤:
(1)WebDriver:这是selenium的核心组件,它是一个用于控制浏览器的API。WebDriver提供了许多方法,用于在浏览器中模拟用户操作。不同的浏览器需要相应的WebDriver实现。
(2)浏览器驱动程序:每个浏览器需要一个特定的驱动程序,用于与WebDriver通信。例如,Chrome浏览器需要Chorme Driver,Firefox 浏览器需要Gecko Driver等。
(3)浏览器的实例化:在测试开始前,需要实例化一个特定浏览器的webdriver对象,这个webDriver对象可以控制一个真实的浏览器实例。
(4)模拟用户操作:通过webdriver对象,你可以执行一系列模拟用户操作,如点击按钮、输入文本、提交表单、导航到不同页面等。
(5)等待和定位元素:在自动化测试中,等待是一个重要的概念,你要等待页面加载完成、元素可见、元素存在等条件满足后再执行操作。同时,你需要定位要操作的html元素,比如按钮、输入框等。这可以通过各种定位策略如ID、类名、CSS选择器、xpath等来实现。
(6)断言和验证:在自动化测试中,你通常会使用断言来验证预期结果是否与实际结果一致,这可帮助你确认web应用程序的行为是否符合预期。
(7)测试框架集成:selenium可以与不同的测试框架(如junit,testNG,pytest等)集成,以实现更结构化和可管理的测试。
2.selenium实现12306网站自动购票
from selenium import webdriver
import time
import jsonfrom selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWaitdef login():driver.get('https://kyfw.12306.cn/otn/resources/login.html')#最大化窗口driver.maximize_window()#获取扫码登录cookies保存至本地,然后再从txt文件中读取保存到本地的cookie进行登录。该方法可能会在网站升级反爬操作后失效。driver.find_element(By.XPATH,'//*[@id="J-userName"]').send_keys('13709290316')driver.find_element(By.XPATH,'//*[@id="J-password"]').send_keys('428099ab')driver.find_element(By.XPATH,'//*[@id="J-login"]').click()#切换到弹出窗口driver.implicitly_wait(20)time.sleep(10)login_btn_loc=driver.find_element(By.XPATH,'//*[@id="modal"]/div[2]')driver.find_element(By.XPATH,'//*[@id="id_card"]').send_keys('0826')driver.find_element(By.XPATH,'//*[@id="verification_code"]').click()#手动输入验证码time.sleep(30)driver.find_element(By.XPATH,'//*[@id="sureClick"]').click()# print("用户登录")time.sleep(2)# 登录完成后就会跳转新窗口n = driver.window_handlesprint('当前句柄', n)driver.switch_to.window(n[-1]) # driver切换至最新生产的页面# '''1.cookie是用于保存用户的类似账号密码等个人信息并存储在浏览器中,是一种数字形式的访问凭证。# 2.cookie有很多类型,因此在使用cookie时要先判定其数据类型'''cookie = driver.get_cookies()# print(cookie)# 获取list的cookiesjsonCookies = json.dumps(cookie)# 转换成字符串保存with open('ticket_cookies.txt', 'w')as f:f.write(jsonCookies)# print('cookies保存成功!')def buy():# 将鼠标悬停在车票页签上ele=driver.find_element(By.XPATH,'//*[@id="J-chepiao"]/a').click()#在driver浏览器上面,创建selenium的鼠标类操作对象# action=ActionChains(driver)
# 把鼠标移动到元素上#action.move_to_element(ele)driver.implicitly_wait(15)#点击买票driver.find_element(By.XPATH,'//*[@id="megamenu-3"]/div[1]/ul/li[1]/a').click()driver.implicitly_wait(15)n = driver.window_handlesprint('当前句柄', n)driver.switch_to.window(n[-1]) # driver切换至最新生产的页面time.sleep(3)# 选择出发地driver.find_element(By.XPATH,'//*[@id="fromStationText"]').click()driver.find_element(By.XPATH,'//*[@id="ul_list1"]/li[29]').click()
# 选择到达地driver.find_element(By.XPATH,'//*[@id="toStationText"]').click()driver.find_element(By.XPATH,'//*[@id="ul_list1"]/li[2]').click()
# 选择日期,先清空文本框的值driver.find_element(By.XPATH,'//*[@id="train_date"]').clear()driver.find_element(By.XPATH,'//*[@id="train_date"]').send_keys('2023-08-09')driver.find_element(By.XPATH,'//*[@id="query_ticket"]').click()driver.implicitly_wait(15)driver.find_element(By.XPATH,'//*[@id="ticket_8d000G318206_08_23"]/td[13]/a').click()
#创建程序入口
if __name__=='__main__':driver = webdriver.Chrome()login()time.sleep(2)buy()
3.开源库管理
在python项目的project目录下放置一个requirements.txt文件,在terminal中运行命令:
pip install -r requirements.txt
就会自动安装文件中所有需要的库。
# This is a mirror image of Tsinghua University
# -i https://pypi.tuna.tsinghua.edu.cn/simple# This is the specified version
# selenium==4.8.2
selenium
pytest
相关文章:
selenium官网文档阅读总结(day 4)
1.selenium的工作原理 selenium的工作原理涉及以下主要组件和步骤: (1)WebDriver:这是selenium的核心组件,它是一个用于控制浏览器的API。WebDriver提供了许多方法,用于在浏览器中模拟用户操作。不同的浏览器需要相应…...
15.4 【Linux】可唤醒停机期间的工作任务
15.4.1 什么是 anacron anacron 并不是用来取代 crontab 的,anacron 存在的目的就在于我们上头提到的,在处理非24 小时一直启动的 Linux 系统的 crontab 的执行! 以及因为某些原因导致的超过时间而没有被执行的调度工作。 其实 anacron 也是…...
[FPGA开发]解决正点原子Xilinx下载器无法下载、灯不亮的问题
问题描述 使用正点原子的Xilinx下载器下载时,电脑无法识别下载器,Vivado无法识别开发版。 问题解决 1.检查XIlinx下载器的灯是否亮起。 亮灯说明解决方法红灯亮起下载器可以连接到PC检查开发版是否供电正常蓝灯亮起下载器可以连接到PC,下…...
DP(区间DP)
石子合并 设有 N 堆石子排成一排,其编号为 1,2,3,…,N。 每堆石子有一定的质量,可以用一个整数来描述,现在要将这 N 堆石子合并成为一堆。 每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆…...
MySQL5.7保姆级安装教程
环境 Linux版本Mysql版本(待安装)CentOS 75.7 1、配置YUM源 在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo/yum/ 目前MySQL官网下载的MySQL源安装后yum下载的MySQL是8.0版本,为了非必要的麻烦,直接提供MySQL5.7的…...
Linux:getopts解析命令行选项和参数
一.背景 当自己编写多个shell脚本进行嵌套调用时,会涉及到传参数问题,此时可以通过getopts设置参数输入与变量赋值. 二.用法 当使用 getopts 命令来解析命令行选项和参数时,你需要在脚本中创建一个循环,循环中使用 getopts 命令来获取每个选项及其参数…...
c语言——三子棋
基本框架 三个文件: 其中.cpp文件用于游戏具体函数设计,.h文件为游戏的函数声明,test.cpp文件用于测试游戏运行。 需要用到的头文件: #include <stdio.h> #include <stdlib.h>//rand&srand #include <time.h>//时间相…...
Android 广播阻塞、延迟问题分析方法
一、问题 最近遇到一个问题,发送广播(普通广播)给另一个应用,但是广播需要要等约1min后才收到。 二、分析原因 原因是系统有个广播接收器在接收到广播后处理了接近50s,所以阻塞了后面的广播处理。如果大家也出现了广…...
HTML JS 解析器出sql 中 的所有表名称,支持多条SQL
<!DOCTYPE html> <html> <head><title>SQL表名提取器</title><script src"https://code.jquery.com/jquery-3.6.0.min.js"></script><script>function extractTableNames() {// 获取输入的SQL语句var sql document…...
【雕爷学编程】Arduino动手做(05)---热敏电阻模块之的基本参数、模块特色、电原理与使用说明
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…...
MS31860T 国产 8通道串行接口低边驱动器 可PIN TO PIN替代DRV8860 高性价比
MS31860T 国产 8通道串行接口低边驱动器 可PIN TO PIN替代DRV8860 高性价比 产品简述 MS31860T 是一款 8 通道低边驱动器,包含 SPI 串口通信、 PWM斩波器配置、过流保护、短路保护、欠压锁定和过热关断功能,芯片可以读取每个通道的状态。MS31860T 可以…...
百度 amis 当成 UI 库用
百度 amis 当成 UI 库用 1.获取到这些 amis 对外提供的方法 var amisLib amisRequire(amis);// 获取到这些 amis 对外提供的方法。 2.js中使用百度amis中 confirm amisLib.confirm(amisLib 是否确认).then((confirmed) > {if (confirmed) {// 用户确认后执行的操作consol…...
质检工具(FindBugs、CheckStyle、Junit、Jmeter、Apifox)
1、Findbugs IDEA软件中可以装该插件,2018版本以前主要搜索FindBugs-IDEA 、2018版本以后主要搜索 SpotBugs。 1.1、FindBugs-IDEA安装及使用流程: 1.2、SpotBugs安装及使用流程: 2、Checkstyle IDEA软件中可以装该插件,所有版本的插件一致:CheckStyle 2.1、安装流程…...
MS31803TE 国产 四通道低边驱动器 PIN对PIN替代DRV8803
MS31803TE 国产 四通道低边驱动器 PIN对PIN替代DRV8803 产品简述 MS31803TE 是一个具有过流保护功能的 4 通道低边驱动器。MS31803TE 内置钳位二极管,用来钳制由电感负载续流产生的电压。MS31803TE 可以驱动单极步进电机、直流电机、继电器、螺线管或者其它负载。…...
wordpress数据表中标签和分类如何区分?
wordpress中标签和分类是什么关系怎么区分?最后有一个群的网友告诉了我文章ID和标签ID的关系是放在了wp_term_relationships表中,然后我百度了下这个表的结构和相关介绍,发现果然如此,先把文章保存起来: wp_term_rela…...
css3 实现文字横幅无缝滚动
css3 实现文字横幅无缝滚动 使用 css3 关键帧 keyframes 和 animation 属性实现文字横幅无缝滚动。 <template><div class"skiHallBanner"><div class"skiHallBanner-text"><span>{{ text }}</span></div></div>…...
unity 修改默认脚本
using System.Collections; using System.Collections.Generic; using UnityEngine; //***************************************** //创建人: xxxx //功能说明: //***************************************** #ROOTNAMESPACEBEGIN# public class #SCRI…...
【MySQL】增删查改基础
文章目录 一、创建操作1.1 单行插入1.2 多行插入1.3 插入否则替换更新1.4 替换replace 二、查询操作2.1 select查询2.2 where条件判断2.3 order by排序2.4 limit筛选分页结果 三、更新操作四、删除操作4.1 删除一列4.2 删除整张表数据 五、插入查询结果 CRUD : Create(创建), R…...
【vue+el-table+el-backtop】表格结合返回顶部使用,loading局部加载
效果图: 一. 表格结合返回顶部 二. 局部loading 解决方法: 一 返回顶部 target绑定滚动dom的父元素类名就可以了. 1.如果你的表格是 固定表头 的,那滚动dom的父元素类名就是 el-table__body-wrapper <el-backtop target".el-table__body-wrapper" :visibility…...
设计模式(4)装饰模式
一、介绍: 1、应用场景:把所需的功能按正确的顺序串联起来进行控制。动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。 当需要给一个现有类添加附加职责,而又不能采用生成子类的方法…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
密码学基础——SM4算法
博客主页:christine-rr-CSDN博客 专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 编辑…...
负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!
多连接 BLE 怎么设计服务不会乱?分层思维来救场! 作者按: 你是不是也遇到过 BLE 多连接时,调试现场像网吧“掉线风暴”? 温度传感器连上了,心率带丢了;一边 OTA 更新,一边通知卡壳。…...
