目录

一、快速入门

二、实战案例

三、说在最后


大家期待已久的自动化小系列之浏览器篇来啦!

在开始今天的文章前,我想问问大家,在日常工作生活中,不知你有没有碰到以下一些问题呢:

  • 周五下班回家了,结果忘记登入工作日志,家里又没有电脑,怎么办呀?

  • 今天某某商城搞了一个秒杀,我手速太慢了,怎么才能打败别人抢到商品啊?

  • 今天又是一年一度的选修抢课,之前练习了好多次,都没有抢到想要的课程。

如果不巧你也有这样的烦恼,那定不要错过本期内容!

P.S:有些东西比较敏感,我不能展开描述,大家要抱着学习的态度,切勿用于违法犯罪用途哟!

一、快速入门

我们这次做浏览器自动化所使用的主要工具依旧是selenium,下面还是先介绍一下它吧。

什么是selenium

Selenium 是一个用于 Web 应用程序测试的工具。Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。

Selenium 支持的浏览器包括:

  • IE(7, 8, 9, 10, 11)、

  • Mozilla Firefox、

  • Safari、

  • Google Chrome、

  • Opera,

  • Edge等

这个工具的主要功能包括:

  • 测试与浏览器的兼容性——测试应用程序,看是否能够很好得工作在不同浏览器和操作系统之上。

  • 测试系统功能——创建回归测试检验软件功能和用户需求。

  • 支持自动录制动作和自动生成 .Net、Java、Perl 等不同语言的测试脚本。

Selenium 还有以下优点:

  • 框架底层使用 JavaScript 模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从终端用户的角度测试应用程序。

  • 使浏览器兼容性测试自动化成为可能,尽管在不同的浏览器上依然有细微的差别。

  • 使用简单,可使用 Java,Python 等多种语言编写用例脚本。

But!如果你仅仅把它当成测试工具来玩的话,那你格局就小啦~

不只是测试工具的 Selenium

除了测试,我们可以利用 Selenium 可以执行 JavaScript 代码的特性,来玩更高级爬虫和一些流程操作。

下面我们举一个小小的实例来说明:

Step 1:搭配浏览器驱动

selenium 需要搭配浏览器的驱动,这个到各个浏览器官网去下就行了,然后丢到 python 的安装目录即可。

本项目我用的是微软的 Edge 浏览器,其他浏览器流程差不多,有兴趣的话可以自行百度,但是一定要注意驱动版本要对应浏览器版本。

Step 2:代码测试

导一下包就可以写代码测试啦~

from selenium import webdriver
from time import sleep from selenium.webdriver.common.by import By driver = webdriver.Edge()
driver.get(r'https://www.baidu.com') # 通过id找到搜索框
inputElement = driver.find_element(By.ID, "kw")
# 向搜索框写入 digital china
inputElement.send_keys("digital china") # 通过id找到搜索按钮 buttonElement = driver.find_element(By.ID, "su")
# 点击搜索按钮
buttonElement.click() sleep(5)
driver.close()

/ 测试代码

上述代码的运行效果就是代码启动后,浏览器自动打开百度首页,自动输入 digital china,然后点击搜索,5秒钟后,浏览器自动关闭。

这个操作是很快的,类似于极限的人工模拟操作浏览器,大家可以自己试一下。

代码分析

其实具体我也不需要太细讲,做开发的话自然是一眼懂,基本上套这个模板就 OK 了。

但我还是要着重说几个地方,直接贴图吧~

/ 8 种元素查询方案

/ 多种操作元素的方法

显而易见,我们只需要关注两点:

  • 第一个就是如何找到页面上的元素

  • 第二个就是这个元素可以执行什么方法

由图一可知,我们一共有 8 种元素查询方案。

由图二可知,我们有很多种操作元素的方法,不乏有点击,提交,填充等方法,甚至还可屏幕截图,你就说顶不顶。

好了,你现在已经可以说自己会 selenium 了,剩下的有需要了再自己去百度,套上我的模板,你已经可以做一些自动化的事情了。

二、实战案例

假设前提

  • 某公司的管理系统是内网环境,无法连接任何外部互联网,用户在浏览器端5分钟不操作就会自动退出登录。

  • 领导给了你一份秘密文件,让你晚上8点的时候准时发送邮件给总经理,但是你的下班时间是6点,你不想加班。

  • 邮件系统已经配置好了,你只用复制粘贴内容点击发送即可。

现在,你是坐办公室等到 8 点,然后发邮件,

还是写一个脚本,然后回家溜溜球?

那当然选后者啦!

解决思路

Step 1:分析系统构成

Step 2:远程发送短信步骤

  • 打开浏览器,进入系统首页

  • 找到邮件管理菜单并单击进入

  • 输入邮件标题、收件用户(这里即总经理的邮箱)、邮件正文

  • 点击发送按钮

Step 3:编写代码脚本

startup.bat文件

import time from selenium import webdriver
from time import sleep from selenium.webdriver.common.by import By def send_email(): driver = webdriver.Edge() driver.get(r'http://127.0.0.1') # 找到账号输入框,并填入账号userName = driver.find_element(By.XPATH, "//input[@placeholder='请输入手机 号']")userName.send_keys("13333333333") # 找到密码输入框,并填入密码 password = driver.find_element(By.XPATH, "//input[@placeholder='请输入密 码']")password.send_keys("password") # 点击登录按钮 loginButton = driver.find_element(By.XPATH, '//*
[@id="app"]/div/div/div[2]/div[2]/form/div[3]/div/button/span') loginButton.click() # 停 1s 是为了等待 js 加载响应结果至 html,如果网络较慢,请适当增加等待时间 sleep(1) # 找到邮件管理菜单并进入 menuButton1 = driver.find_element(By.XPATH, '//span[text()="系统配置"]') menuButton1.click() menuButton2 = driver.find_element(By.XPATH, '//span[text()="邮件管理"]') menuButton2.click() sleep(1) # 进入发送邮件页面 emailPage = driver.find_element(By.XPATH, '//*[@id="tab-second"]') emailPage.click() sleep(1) input1 = driver.find_element(By.XPATH, "//input[@placeholder='请输入邮件标 题']")input1.send_keys("神州数码秘密文件") input2 = driver.find_element(By.XPATH, "//input[@placeholder='请输入收件人 邮箱']") input2.send_keys("504305797@qq.com") input3 = driver.find_element(By.ID, "w-e-textarea-1") input3.send_keys("这是一封神州数码的秘密文件,武汉云基地真的很顶!千万不要告诉别人 呀!")# 点击发送按钮 send = driver.find_element(By.XPATH, '//span[text()="发送邮件"]') send.click() sleep(5) driver.close() while True: current = time.localtime() hour = current.tm_hour minute = current.tm_min second = current.tm_sec if hour == 20 and minute == 0 and second >= 0: send_email()break

代码详解

#1

在脚本中,可以看到我使用了多种查找方式,找到对应的 html 元素。

其中大部分都是直接分析后使用 xpath 来定位。其实还有一个非常方便的方法可以获取元素的 html 元素。选中元素,点击右键,即可复制 xpath。

虽然说这玩意复制来的比较丑,但是,不用你自己动脑子了,还要啥自行车?

#2

多次调用 sleep 是为了等待 js 加载响应结果至 html。但是如果网络较慢,还是要请适当增加等待时间。

#3

其他也没啥好说的了,结果肯定就是成功发送邮件咯~

三、说在最后

最后,你也体会到 selenium 的妙用了吧,它能够帮我们自动完成很多关于浏览器的操作,大大扩展了我们解决问题的方案池!

现在,你或许可以尝试自己去实现一下怎么实现秒杀、自动填日报、自动抢课了~

最最后,提示大家一点,千万不要过分的去试某宝、某东秒杀。不然你号就无了,这都是过来人的经验,大家珍重哇!这些敏感的东西,我也不好写demo,所以,还是抱着学习的态度去玩吧~

最最最后,上面演示的后台系统为 sherly-springboot 和 sherly-vue3 ,是我们空闲时间做的一个开源系统,在 gitee,如果有兴趣,可以支持一下点个 star 哦~ 爱你们~

Why code?This may an answer ~

解决生活中真实遇到的问题,而不是为了编码而编码,这或许才是我们应该反思的!

版权申明:文章由神州数码武汉云基地团队实践整理输出,转载请注明出处。
微信公众号后台回复“技术合集”,可获取更多干货内容!

基地树洞 |如何用selenium解决生活中的烦恼?相关推荐

  1. 基地树洞 | 自动化小系列之整合篇

    记得上初中的那会儿,玩过一个叫作 DNF 的游戏. 如果你选的角色和我一样,都是神枪手,那么你大概记得,光是要开枪普攻就要不停地按X键,按一下打一发子弹. 为此大家都会去网上下一个自动连点的小工具,有 ...

  2. 用计算机处理信息的例子,用计算机解决生活中实际问题的方法--

    适用范围:高二年级下期<算法与程序设计>(选修模块) 课时:1课时 一.教学目标 1.课程标准中的相关内容 课程标准在<算法与程序设计>模块中有如下阐述:"教师应引导 ...

  3. 运用计算机思维可以解决什么问题,计算机思维是能否解决生活中遇到的难题?...

    原标题:计算机思维是能否解决生活中遇到的难题? 首先,我们要明白什么是计算性思维? 计算性思维(Computational Thinking)用计算机逻辑来解决问题的思维:将一个困难问题分解,通过逻辑 ...

  4. 用计算机解决生活中实际问题的方法,用计算机解决生活中实际问题的方法--

    用计算机解决生活中实际问题的方法-- 适用范围:高二年级下期<算法与程序设计>(选修模块) 课时:1课时 一.教学目标 1.课程标准中的相关内容 课程标准在<算法与程序设计>模 ...

  5. c语言程序解决生活中的问题作文,生活中烦恼的事五年级满分作文

    在我们人生的道路上,总会遇到这样那样的烦恼,困难与挫折,但在那时候,我们更不能惊慌,要静下心来沉住气,认真的去想解决的方法.勇敢地去面对,这是人生的一道坎儿.下面是小编为大家整理的关于生活中烦恼的事五 ...

  6. 最适合用计算机编程来解决,计算机编程语言轻松解决生活中的问题 你会用吗?...

    数学在我们的应用是基本的,买菜的时候看到商品单价*想要购买的数量即可在心中大致得出需要付款的金额,提前计算一下可以避免结算时兜里钱不够的尴尬.那么遇到庞大的数额时,我们使用计算器来辅助进行计算,比如会 ...

  7. 用编程解决生活中的问题

    最终队列呀.栈呀.二叉树呀,它们的实际意义是通过创建一个用于存放实际相关的对象元素的容器对象: 1. 自然语言抽象为程序语言 用(局部)变量记录其他一些简单信息: 灯.通道的状态(开.关:空闲.占用) ...

  8. C语言小游戏解决生活中的数学问题

    小游戏 游戏1--鸡兔同笼问题 eg. 鸡和兔关在一个笼子里,鸡有2只脚,兔有4只脚,没有例外.已知现在可以看到笼子里m个头和n只脚,求鸡和兔子各有多少只? 代码展示: #include<std ...

  9. 如何使用python编程解决生活中的问题-日常工作问题处理中Python程序的运用

    计算机应用毕业论文第八篇:日常工作问题处理中Python程序的运用 摘要:Python是一门简单.实用而且有趣的百搭款语言,在Web应用开发.系统网络运维.科学与数字计算.网络编程等领域都有所建树.在 ...

最新文章

  1. PyTorch官方中文文档:torch.optim 优化器参数
  2. ad软件 pcb如何走线过孔_【经验】关于高速PCB设计的一些经典问答
  3. cocos2dx build_native.sh clean 命令报错的解决
  4. Excel抽奖小程序
  5. 一把“万能钥匙”就能开所有共享单车,撬走3亿元,开发者已被抓捕...
  6. 超级仿制药行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  7. linux下的图形界面扫雷游戏(Gtk+2.0)
  8. 用php实现下载生成某链接的快捷方式
  9. Oracle物化视图的一般使用【转】
  10. final关键字深入解析
  11. RFID FDX HDX Technology
  12. PreScan、Carsim、Carmaker和VTD联合仿真
  13. 刷脸支付重磅来袭是业界的口碑代表
  14. Spring Cloud Stream初窥
  15. 设计模式~调停者(中介)模式-06
  16. 【前沿技术】在安全且可靠的区块链基础设施中运行业务条线应用
  17. 抖音落地页一键复制微信号跳转微信的方法
  18. sql2000服务器的注册码,安装完成后如何找回SQL Server实例安装时的序列号
  19. android Codec-specific data
  20. 国际上公认的IT证书

热门文章

  1. js实现淘宝放大镜效果
  2. 天猫数据分析:饮料市场头部份额下滑,无糖饮料占比40%
  3. 硬盘里的文件破损怎么恢复丨顶尖数据恢复丨
  4. 《张成功项目管理记(第2版)》一第一章 结缘项目管理
  5. 爬虫(22)scrapy登录与middlewares
  6. 0909回顾会--数据库导出Excel邮件发送
  7. 关于经济被高度控盘的思考:朋友、利益、趋势
  8. 华为在欧洲申请了新的折叠手机专利,似乎认可三星的折叠手机技术
  9. 牛顿迭代法 进行低周疲劳应力应变计算 C++编程函数
  10. 工具类小程序小帮手成长路程一