文章目录

  • 第一步:下载安装 chromedriver
  • 第二步:安装Python第三方库selenium
  • 第三步:Python代码的编写
    • 1. 输入框处理
    • 2. 点击登录
    • 3. 下拉框的处理
    • 完整代码如下:
  • 第四步:设置电脑定时运行程序

第一步:下载安装 chromedriver

chromedriver是chrome浏览器的驱动,下载前查看自己chrome的版本。打开chrome浏览器输入chrome://settings/help 可以看到版本号

然后点击https://npm.taobao.org/mirrors/chromedriver/ 下载对应版本的chromedriver。我的chrome是最新版本没有对应版本的chromedrive,我就下载了最相近的chromedrive,也可以并没有报错。下载解压后得到一个chromedriver.exe可执行文件将其放到chrome安装目录下,我的是 C:\Program Files\Google\Chrome\Application再将此目录添加到环境变量中。同时按Windows+R键弹出如下框图

输入cmd确定,进入命令窗口输入chromedriver,如果输出如图所示信息则说明chromedriver安装成功环境变量也添加成功。

第二步:安装Python第三方库selenium

Selenium 是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击、下拉等操作。我们就是利用这个包模拟点击登录,模拟填写信息。下面我们来看看 Selenium 的安装过程。打开cmd命令窗口输入

pip install selenium

安装好后,输入下面的命令,看安装好后的Python包中是否有selenium。

pip list

第三步:Python代码的编写

1. 输入框处理

我用的IDE是Pycharm,原理是这样的,每个网页面是用HTML语言写的,我们能在浏览器看到源代码,这个HTML代码记录了当前页面的所有信息。在页面上点击鼠标右键,选择检查就能看到代码。下面的是我学校的登录页面。我们能跟页面交互的信息就在红框内。我现在定位第地方是输入学号的框,可以看到这个框有一些属性,type=‘’ text’’ 说明这个框是输入文本的,还有属性name和id。相当这个框的身份证一样,我们就是靠这些属性定位到这些框的位置。

操控浏览器的实质是操控浏览器的界面元素,因此定位元素是使用selenium的关键,selenium中通过find_element方法来完成定位。find_element的三种用法

  1. find_element(“属性名”,“属性值”) 例如:
find_element("name" , "username")
find_element("id" , "password")
  1. find_element_by_xx(" ")(在selenium的4.0版本中此种用法已经抛弃,不推荐使用,可能会报错)。
  2. 通过webdriver模块中的By,以指定方式定位元素。导入模块:from selenium.webdriver.common.by import By如利用Xpath定位,这个是元素路径,有些元素没有id ,name等属性就可以用元素的Xpath定位,推荐使用这种方法,那如何查看元素的Xpath呢,把鼠标放在你想要定位的元素代码处,然后鼠标右键—>copy—>copy Xpath。
from selenium.webdriver.common.by import By
find_element(By.XPATH, '//*[@id="form1"]/div[6]/ul/li[1]/a/div')

2. 点击登录

首先要定位到登录的位置再点击,click()就是点击方法,我这里使用了class属性定位。

find_element('class name','submit_button').click()

3. 下拉框的处理

下拉框可能有几种,我这里的是input下拉框。可以看到这里有一个属性readonly,它说明这个元素只能读不能写,只能由我们选择。有些博客说可以用JavaScrapt脚本把readonly属性去掉。然后再写入,我试了一下好像不太行。所以我还是用鼠标点击模拟选择。首先定位到最右边的倒三角形然后鼠标点击就会列出省份然后定位你的省再鼠标点击。


下拉框中的选择项一般出现在 ul /ul中。

这里只能通过Xpath定位省份,因为没有其他的元素属性。所在市,所在县都有readonly属性,一样的方法。具体地址没有readonly属性可以直接写入。最后一步是点击最下面的提交确认。

#定位倒三角形位置点击
find_element(By.XPATH, '//*[@id="p1_ddlSheng"]/div[2]/div/div').click()
#定位所在省份点击
find_element(By.XPATH, '/html/body/ul[1]/li[15]').click()

其他的一些圆圈选择就是定位再点击很简单,需要改什么就改。一般我们登录后好多信息都已经填好了,可能只需要点击一下提交确认就行了。我这里需要选择地址因为以前在学校现在回家了,需要重新选择地址。

完整代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time       #用来延时的,需要等页面刷出来后在点击和输入。start = time.perf_counter()       #程序开始时间
bro = webdriver.Chrome()     #创建一个浏览器对象
bro.get('https://hsm.sspu.edu.cn')    #输入第一个页面的网址
bro.find_element('name','username').send_keys('你的学号')  #输入学号
bro.find_element('name','password').send_keys('你的密码')  #输入密码
bro.find_element('class name','submit_button').click()   # 点击确认#bro.get('https://hsm.sspu.edu.cn/selfreport/Default.aspx')
time.sleep(1)  #延时一秒等待刷出第二个页面
bro.find_element(By.XPATH, '//*[@id="form1"]/div[6]/ul/li[1]/a/div').click()   #点击每日一报#bro.get('https://hsm.sspu.edu.cn/selfreport/DayReport.aspx')
bro.find_element(By.XPATH, '//*[@id="p1_ddlSheng"]/div[2]/div/div').click()    #选择省份
bro.find_element(By.XPATH, '你省份的Xpath').click()  bro.find_element(By.XPATH, '//*[@id="p1_ddlShi"]/div[2]/div/div').click()    #选择市
time.sleep(1)
bro.find_element(By.XPATH, '你市的Xpath').click()
time.sleep(1)  bro.find_element(By.XPATH, '//*[@id="p1_ddlXian-inputEl"]').click()
time.sleep(1)
bro.find_element(By.XPATH, '你县的Xpath').click()    #选择县bro.find_element('name','p1$XiangXDZ').clear()   #清除框里的内容
bro.find_element('name','p1$XiangXDZ').send_keys('具体地址')   #填写具体地址bro.find_element('class name', 'f-btn-text').click()     #点击确认提交
end = time.perf_counter()     #程序大概结束时间
print("final is in ",end-start)  #打印出程序耗时几秒

可以在我这个代码的基础上添加或删除。总的来说,第一步就是要定位到要操作的元素,可以用好多属性定位,没有属性就用Xpath,如果是输入框就用.send_keys()方法输入文本,点击就用.click()方法。

第四步:设置电脑定时运行程序

我的电脑是Windows11,找到此电脑鼠标右键管理,点击创建基本任务。

然后按照步骤来一步步创建定时执行的任务,在操作步骤中选择启动程序添加Python脚本。

Python每日一报相关推荐

  1. selenium实现高校班级打卡-石墨文档每日一报自动化

    selenium实现高校班级打卡-石墨文档每日一报自动化 selenium-WEB自动化工具 selenium-WEB自动化工具 Selenium是一个用于Web应用程序测试的工具.Selenium测 ...

  2. Python每日一练0023

    问题 如何判断一个文件是否存在 解决方案 这个问题可以分成几类问题 如果这里的文件指的是文件或目录,我们可以用os.path.exists()方法 >>> import os > ...

  3. python调用dll报错:ValueError: Procedure called with not enough arguments (4 bytes missing) or wrong call

    python调用dll报错:ValueError: Procedure called with not enough arguments (4 bytes missing) or wrong call ...

  4. python导入openpyxl报错问题,终于解决啦

    python导入openpyxl报错问题,终于解决啦 参考文章: (1)python导入openpyxl报错问题,终于解决啦 (2)https://www.cnblogs.com/guotang/p/ ...

  5. Python 中文注释报错解决方法

    Python 中文注释报错解决方法 参考文章: (1)Python 中文注释报错解决方法 (2)https://www.cnblogs.com/cjiong/p/5881983.html 备忘一下.

  6. Python每日一练0004

    问题 如何保存迭代对象的最后N个元素 例如保存列表['a', 'b', 'c', 'd']的最后2个元素 或者保存某个迭代器对象的最后5个元素 解决方案 对于列表.元组这样的数据结构,可以使用切片来很 ...

  7. python 编程一日一练-python每日一练

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 过滤掉列表中的负数 筛选出字典{lilei: 79,jim: 88,lu ...

  8. python 编程一日一练-Python每日一练0022

    问题 你想在一个文件里每次读入固定大小的字节,比如每次读入4个字节并转成int,或者每次读入x个字节并进行结构化,例如: l = [5, 2, 4, 1, 2, 4, 5, 6, 8] with op ...

  9. python 编程一日一练-Python每日一练0013

    问题 现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作, 比如查找值或者检查某些键是否存在. 解决方案 使用collections库的ChainMap类,可以快速的将多个d ...

最新文章

  1. Mybatis常用查找的总结
  2. 【GLib】GLib学习笔记(二):源码编译
  3. Pacbio三代基因组组装简介
  4. python编程语言的缺点-常见的AI编程语言优缺点比较,程序员千万不要入错行!...
  5. com组件的ref有时需要有时不需要?_Vue3组件通信总结
  6. 不负众望,窝窝世界新版放出(内测):P
  7. 这篇 CPU Cache,估计要消化一下
  8. 几个高逼格 Linux 命令!
  9. 加载oracle属性文件,关于属性文件的详细介绍
  10. mysql 数据库备份的多种方式
  11. 科赫雪花c语言程序设计,用 C 语言画科赫雪花
  12. 微软亚洲研究院 (MSRA) 的实习体验如何?
  13. 一寸照片电子版怎么弄?电子证件照制作方法
  14. 新番 | 万万没想到,Hulu有一天也开始推新番了
  15. 计算机休眠唤醒后 网络受限,Windows 10中的睡眠/唤醒/休眠状态后,Wi-Fi网络消失...
  16. 论坛mysql cpu100_解决 MYSQL CPU 占用 100% 的经验总结
  17. 重绘、重排区别及如何减少
  18. 访问HDFS的权限问题:Permission denied: user=xxx, access=WRITE, inode=“xxxxxxxx“:
  19. 在Word中让公式在中间,公式编号右对齐
  20. Geometry Processing 几何处理 7

热门文章

  1. 关于android有道词典的修改
  2. 适合程序员使用的键盘有哪些?
  3. 就是美女,怎么了!!!
  4. SDR HDR 区别
  5. 简述与机器学习相关的十大常用Python库,极简化算法编程
  6. javascript,H5,jQuery,css“实现音乐歌词解析,歌词同步滚动,进度条拖拽、进度条同步,音量控制,歌词同步高亮的功能齐全的简易音乐播放器
  7. C语言中p, *p, p, *p, **p的理解-初级
  8. 系统分析师的必备素质和技能
  9. 南京大学交叉培养计算机与金融招生人数,教务处组织召开计算机与金融工程实验班师生见面会...
  10. 对于现在毕业之后,大部分找不到合适的工作,转行到软件开发(大部分是JAVA)的人来说,分享下自己的经验