- 第一步:下载安装 chromedriver
- 第二步:安装Python第三方库selenium
- 第三步:Python代码的编写
- 1. 输入框处理
- 2. 点击登录
- 3. 下拉框的处理
- 完整代码如下:
- 第四步:设置电脑定时运行程序
chromedriver是chrome浏览器的驱动,下载前查看自己chrome的版本。打开chrome浏览器输入chrome://settings/help 可以看到版本号
然后点击https://npm.taobao.org/mirrors/chromedriver/ 下载对应版本的chromedriver。我的chrome是最新版本没有对应版本的chromedrive,我就下载了最相近的chromedrive,也可以并没有报错。下载解压后得到一个chromedriver.exe可执行文件将其放到chrome安装目录下,我的是 C:Program FilesGoogleChromeApplication再将此目录添加到环境变量中。同时按Windows+R键弹出如下框图
输入cmd确定,进入命令窗口输入chromedriver,如果输出如图所示信息则说明chromedriver安装成功环境变量也添加成功。
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的三种用法
- find_element(“属性名”,“属性值”) 例如:
find_element("name" , "username")
find_element("id" , "password")
- find_element_by_xx(" ")(在selenium的4.0版本中此种用法已经抛弃,不推荐使用,可能会报错)。
- 通过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脚本。



