小工具知识网

当前位置: 首页 > 行业知识 > 【python应用】之selenium做自动化

行业知识

【python应用】之selenium做自动化

2026-10-20 23:43:52 来源:互联网转载

初学者怎么做一个简单的自动化脚本


���示:本篇基于selenium做的一个的脚本,由于我的技术比较有限,所以比较适合初学者学习:

文章目录

  • 初学者怎么做一个简单的自动化脚本
  • 初学python
  • 一、selenium是什么?
  • 二、前期准备
    • 2.1 selenium的使用
    • 2.2 实现元素定位
    • 2.3 解决识别验证码的问题
    • 2.4 把验证码图片保存下来
    • 2.5 实现自动化
    • 三.总结

      初学python

      大家好,我是一名大二的学生,由于暑假学习了python,只学python这些语法是非常枯燥的,学习python的一些库才能做出一些有趣的项目,所以就在b站上学习爬虫,学习的过程中发现selenium可以操作浏览器,就想实现自己帮我点击播放视频,实现自动化网课,抱着这样的目的去学习,最终实现了,结果没刷几个视频就给我封号了,啊哈哈哈哈哈,也就一周吧。但是这样的成就增加了我学习编程的兴趣。

      一、selenium是什么?

      Selenium是一个开源工具,用于自动执行在Web浏览器上执行的测试(可以使用任何Web浏览器进行Web应用程序的测试)。

      二、前期准备

      2.1 selenium的使用

      安装selenium模块,就导入以下模块就可以了

      from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver import EdgeOptions

      以下代码就是创建浏览器对象,并实现反反爬,可以用起

      #实现规避检测爬虫option = EdgeOptions()option.add_experimental_option('excludeSwitches', ['enable-automation'])driver = webdriver.Edge("./msedgedriver.exe", options=option)#设置浏览器全屏化driver.maximize_window()  #为什么实现浏览器全屏化咋后面再说

      使用time.sleep需要导入 import time,为什么使用这个呢?

      简单来说就是可能会因为网速的问题,该页面没加载,就开始点击浏览器某个元素,然而该元素又没有出现,就导致出现一些问题,所以用time.sleep来让程序停一下,在执行下一个程序。

      driver.get(“里面填你要打开的网站”)

      driver.get("")time.sleep(1.2)

      2.2 实现元素定位

      学习八大元素定位可以去b站学习,,也可以看官方文档 Selenium-Python中文文档

      我一般用xpath定位例如:

      ![在这里插入图片描述](https://m.xiaogongju.com.cn/uploads/202511/07/32ff87e3908d4baa.webp).send_keys("2111030***")driver.find_element(By.XPATH,'//*[@]').send_keys("a123****")

      这个登录是需要点击的,点击的代码:

      driver.find_element(By.XPATH,'//*[@]/p/p[5]/p/input[2]').click()

      浏览器中的元素要么是输入数据,要么是点击,这样就能让机器自动操作了

      这里有一个验证码识别 的难题

      2.3 解决识别验证码的问题

      import ddddocr#识别验证码def code():    ecr = ddddocr.DdddOcr()    with open("code.png","rb") as f:        img = f.read()    result = ecr.classification(img)    print("结果是:",result)    return resultcode()

      这个模块能实现大部分数字字母验证码的识别,还是挺不错的,也可以选择网上的云打码平台,但是需要付费。

      能实现验证码的识别,要想怎么把验证码保存成图片呢?

      肯定不能手动保存,为什么呢?因为手动保存的验证码图片会改变,每一次刷新页面验证码图片都改变了,所以就要想其他方法。

      2.4 把验证码图片保存下来

      我了解到了一个方法就是把有验证码的那个网页截屏保存下来(这里最好设置浏览器全屏化,上面有提到,方便截图,截取验证码出来),selenuim就有一个方法可以截取整张页面,但还需要 把整张页面截屏的验证码那一块单独再截取出来

      #保存整张界面的代码 driver.save_screenshot("a.png")

      截取局部验证码就需要以下代码

      driver.find_element(By.XPATH,‘/html/body/p/p[2]/p[2]/p/form/p/p[3]/p[2]/span[2]/img’)这串代码的作用就是找到验证码的元素定位。

      这里我讲一讲k值的作用,不调整k值的大小,你会发现验证码元素定位也定正确了,可就是截取不到验证码图片,这就跟你自己电脑的缩放比例有关系了,我的是125%,所以k值为1.25.,如果还有一点误差就自己调。

      #确定验证码的坐标code_png_lel = driver.find_element(By.XPATH,'/html/body/p/p[2]/p[2]/p/form/p/p[3]/p[2]/span[2]/img')location = code_png_lel.location  #验证码左上的 x,ysize = code_png_lel.size  #宽度print('location',location)print(size)k = 1.25#图片左上角和右下角的xy坐标rangle = (    int(location['x'])*k, int(location['y'])*k, int(location['x']+size['width'])*k, int(location['y']+size['height'])*k)#验证码区域确定好了

      整张页面保存下来后,截取验证码图片,导入from PIL import Image 这个

       #对全局页面进行截图获取局部验证码i = Image.open('./a.png')   #打开的是那张拥有验证码的整张界面的图片#按照给定xy坐标裁剪code_image_name = "code.png"   #给这个验证码图片取一个名frame = i.crop(rangle) #---》上面找到了验证码元素的位置,用来保存frame.save(code_image_name)#保存图片

      以下图片就是从整张界面截取验证码图片的例子

      截取成功验证码图片后就可以用 2.3解决验证识别问题解决验证码识别,然后把识别后的验证码driver.find_element(By.XPATH,“那个元素框”).send_keys(验证码)

      这样就解决了验证码的问题,没有验证码更好解决

      2.5 实现自动化

      就以一个网站为例

      就以第一节和第二节课为例看看他们的xpath

      1–> //[@id=“wrapper”]/p[2]/p/p[1]/p[2]/p/p[2]/p[1]

      2–>//[@id=“wrapper”]/p[2]/p/p[1]/p[2]/p/p[2]/p[2]

      发现他们就后面那个p中的数字不一样,并且对应着节数,利用这个特性不就可以定位元素进行点击,利用一个for循环来做。

      for i in range(12,15):  #这边的数字就对应的你要刷哪一节课,就点击那一节    try:        driver.find_element(By.XPATH,'//*[@]/p[2]/p/p[1]/p[2]/p/p[2]/p[{}]/a'.format(i)).click()        time.sleep(1)        driver.find_element(By.XPATH,'//*[@]/p/p[9]/canvas').click()        time.sleep(2.3)        driver.find_element(By.XPATH,'//*[@]/p[2]/p/p[2]/input[2]').send_keys(sava_img1())        driver.find_element(By.XPATH,'//*[@]/p[3]/a[1]').click()    except:        time.sleep(1)        driver.find_element(By.XPATH, '//*[@]/p/p[9]/canvas').click()        time.sleep(1)    if i==12:        time.sleep(60*20)    elif i==12:        time.sleep(60*22)    elif i==13:        time.sleep(60*22)    elif i==14:        time.sleep(60*20)

      这里我说一下为什么加异常处理,这是因为刷课的时候需要输入验证码,但是也可能有几节不需要输入验证码,不加异常处理 ,它找不到这个元素,那么这个程序不就报错了嘛,如果没有出现这个验证码元素就执行except中的代码,就进行简单的点击就行了

      加time.sleep的原因是因为每一节课都有播放时间 ,肯定要等他们播放。完了,再点击下一节课呀

      三.总结

      这就是一个简单的脚本,学会了可以做一些简单的脚本,来提高自己的学习兴趣,但是这个还有很多的不足。

上一篇:机房ups电源哪里买?

下一篇:气体灭火主机电流大怎么处理好呢(气体灭火主机电流大怎么处理好呢视频)