• 基地树洞 | 自动化小系列之浏览器篇


    目录

    一、快速入门

    二、实战案例

    三、说在最后


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

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

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

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

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

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

    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:代码测试

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

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

    / 测试代码

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

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

    代码分析

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

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

    / 8 种元素查询方案

    / 多种操作元素的方法

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

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

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

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

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

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

    二、实战案例

    假设前提

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

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

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

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

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

    那当然选后者啦!

    解决思路

    Step 1:分析系统构成

    Step 2:远程发送短信步骤

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

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

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

    • 点击发送按钮

    Step 3:编写代码脚本

    startup.bat文件

    1. import time
    2. from selenium import webdriver
    3. from time import sleep
    4. from selenium.webdriver.common.by import By
    5. def send_email():
    6. driver = webdriver.Edge()
    7. driver.get(r'http://127.0.0.1')
    8. # 找到账号输入框,并填入账号
    9. userName = driver.find_element(By.XPATH, "//input[@placeholder='请输入手机 号']")
    10. userName.send_keys("13333333333")
    11. # 找到密码输入框,并填入密码
    12. password = driver.find_element(By.XPATH, "//input[@placeholder='请输入密 码']")
    13. password.send_keys("password")
    14. # 点击登录按钮
    15. loginButton = driver.find_element(By.XPATH, '//*
    16. [@id="app"]/div/div/div[2]/div[2]/form/div[3]/div/button/span')
    17. loginButton.click()
    18. # 停 1s 是为了等待 js 加载响应结果至 html,如果网络较慢,请适当增加等待时间
    19. sleep(1)
    20. # 找到邮件管理菜单并进入
    21. menuButton1 = driver.find_element(By.XPATH, '//span[text()="系统配置"]')
    22. menuButton1.click()
    23. menuButton2 = driver.find_element(By.XPATH, '//span[text()="邮件管理"]')
    24. menuButton2.click()
    25. sleep(1)
    26. # 进入发送邮件页面
    27. emailPage = driver.find_element(By.XPATH, '//*[@id="tab-second"]')
    28. emailPage.click()
    29. sleep(1)
    30. input1 = driver.find_element(By.XPATH, "//input[@placeholder='请输入邮件标 题']")
    31. input1.send_keys("神州数码秘密文件")
    32. input2 = driver.find_element(By.XPATH, "//input[@placeholder='请输入收件人 邮箱']")
    33. input2.send_keys("504305797@qq.com")
    34. input3 = driver.find_element(By.ID, "w-e-textarea-1")
    35. input3.send_keys("这是一封神州数码的秘密文件,武汉云基地真的很顶!千万不要告诉别人 呀!")
    36. # 点击发送按钮
    37. send = driver.find_element(By.XPATH, '//span[text()="发送邮件"]')
    38. send.click()
    39. sleep(5)
    40. driver.close()
    41. while True:
    42. current = time.localtime()
    43. hour = current.tm_hour
    44. minute = current.tm_min
    45. second = current.tm_sec
    46. if hour == 20 and minute == 0 and second >= 0:
    47. send_email()
    48. 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 ~

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

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

  • 相关阅读:
    YOLOV8部署Android Studio安卓平台NCNN
    考研英语不熟悉的词义(List11-List15)
    ChatGPT AIGC 总结Vlookup的20种不同用法
    一文带你了解动态NAT以及NAPT实验配置
    如何才能在人力RPO蓝海项目中实现盈利呢?
    跨境电商和TikTok广告:突破地理界限的机会
    SSM(Spring)
    JavaScript/jQuery功能函数集
    SpringCloudGateway集成SpringDoc CORS问题
    [Common c/c++] 生产者消费者模型 using mutex/cv/semaphore
  • 原文地址:https://blog.csdn.net/CBGCampus/article/details/127656012