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

selenium解放双手--记某电力学校的刷课脚本

免责声明:本文仅做技术交流与学习...

重难点:

1-对目标网站的html框架具有很好的了解,定位元素,精准打击.

2-自动化过程中窗口操作的转换.

前置知识:

python--selenium模块的操作使用

前端的html代码

验证码自动化操作

Chrome  &   Chromedriver  : Chrome for Testing availability

验证码借助第三方平台:

登录超级鹰网站 处理 字符串验证码:
用户登录-超级鹰验证码识别代答题平台

实现代码:

未优化...(没对象版)

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time
from chaojiying import Chaojiying_Client
chrome_path = "D:\\Chrome\\chrome-win64\\chrome-win64\\chrome.exe"  # Chrome浏览器的路径
chrome_driver_path = "../chromedriver-win64/chromedriver.exe"  # Chrome WebDriver的路径chrome_options = webdriver.ChromeOptions()
chrome_options.binary_location = chrome_pathservice = Service(chrome_driver_path)
driver = webdriver.Chrome(service=service, options=chrome_options)
# 目标网址:
driver.get("https://elearning.sepcedu.com/login")
time.sleep(4)
# 输入账号
driver.find_element(By.CLASS_NAME, 'el-input__inner').send_keys('你的账号')
time.sleep(2)
# 输入密码
driver.find_element(By.XPATH, '//input[@type="password"]').send_keys('你的密码')
time.sleep(2)
# 输入验证码操作:
driver.find_element(By.XPATH, '//img').screenshot('../img/logo.png')
chaojiying = Chaojiying_Client('账号', '密码', '唯一ID')
im = open('../img/logo.png', 'rb').read()
code = chaojiying.PostPic(im, 3004)['pic_str']    #数字为验证码的类型.
driver.find_element(By.XPATH, '//input[@placeholder="请输入验证码"]').send_keys(code)
time.sleep(1)
# 点击登录
driver.find_element(By.XPATH, '//button').click()
time.sleep(2.5)# 进入我的学习:
driver.find_element(By.XPATH, '//li[@class="el-menu-item"][1]').click()
time.sleep(1)
# 获取窗口视图
start_window = driver.current_window_handle
# 获取到所有课程的列表
div_s = driver.find_elements(By.XPATH, '//div[@class="courseItem"]')
# 循环课程,单个点击进入:
for div in div_s[6:]:    ########注意,这里的循环遍历自己改.pro = div.find_element(By.XPATH, './/div[@class="el-progress-bar__innerText"]/span')# 完成度判断if pro.text != "100%":print(pro.text)# 进入课程学习an = div.find_element(By.XPATH, './/div[@class="enterCourse"]')an.click()time.sleep(8)# ----------------------------------------------------------# 转换操作窗口:win = driver.window_handlesprint(win)time.sleep(5)driver.switch_to.window(win[1])time.sleep(2)# 先全部展开try:# 展开zk = driver.find_element(By.XPATH, '//a[@class="section-collapsemenu collapsed"]')zk.click()time.sleep(1)except Exception as e:print("发生了其它异常", e)finally:# 按钮:buttons = driver.find_elements(By.XPATH, '//button[@class="btn btn-outline-secondary btn-sm text-nowrap"]')for button in buttons:button.click()time.sleep(0.5)time.sleep(1)# 视频,PDF,文档等等:links = driver.find_elements(By.XPATH, '//ul[@data-for="cmlist"]//li[@data-indexed="true"]//a[@class=" aalink stretched-link"]')href_list = [link.get_attribute('href') for link in links if link.get_attribute('href').startswith('https')]# print(href_list)for href in href_list:print(href+'成功')driver.get(href)time.sleep(2)# 循环后切换页面driver.close()driver.switch_to.window(win[0])else:pass
print("圆满结束")
print("温馨提示:需要自己提交and学习的作业还需要自己去做欧~~~")
time.sleep(30)

 

http://www.lryc.cn/news/344492.html

相关文章:

  • JDK 17有可能代替 JDK 8 吗
  • 代码随想录算法训练营第36期DAY23
  • Leetcode 3128. Right Triangles
  • 力扣经典150题第五十三题:基本计算器
  • 如何为 Nestjs 编写单元测试和 E2E 测试
  • 基于Python的LSTM网络实现单特征预测回归任务(TensorFlow)
  • Spring - 8 ( 10000 字 Spring 入门级教程 )
  • 鸿蒙内核源码分析(忍者ninja篇) | 都忍者了能不快吗
  • Linux——守护进程化(独立于用户会话的进程)
  • 安卓开发--按键跳转页面,按键按下变色
  • Ps基础学习笔记
  • spring开发问题总结(持续更新)
  • Android 状态栏WiFi图标的显示逻辑
  • 更改 DeepXDE 的后端
  • SpringBoot之Zuul服务
  • Go-变量
  • 【CTF-Crypto】RSA-选择明密文攻击 一文通
  • Pytorch基础:torch.expand() 和 torch.repeat()
  • 如何正确安装Scrapy 2.6.1并解决常见的Python环境问题
  • 阵痛中的乳业产业,何时才能成为下一个啤酒产业?
  • 关于模型参数融合的思考
  • Windows MySQL本地服务器设置并导入数据库和数据
  • 豪投巨资,澳大利亚在追逐海市蜃楼吗?
  • 面试集中营—Redis架构篇
  • 05_kafka-整合springboot
  • 论UML在学情精准测评系统中的应用
  • Day23 代码随想录打卡|字符串篇---重复的子字符串
  • 【win10 文件夹数量和看到不一致查看隐藏文件已经打开,Thumb文件作妖】
  • ctfshow web入门 sql注入 web224--web233
  • 「Java开发指南」如何用MyEclipse搭建GWT 2.1和Spring?(一)