每日一报(Python爬虫---基于浏览器自动化)

每日一报以前只需要填写温度,但是随着疫情的严重,填写的内容越来越多,所以可以尝试用浏览器自动化的功能来完成,这样连舍友的也能帮忙完成了。

  • 下载浏览器驱动

     我用的是谷歌浏览器,所以给的这个连接也谷歌浏览器的驱动,大家可以根据自己的谷歌版本自行下载。
     [http://chromedriver.storage.googleapis.com/index.html](http://chromedriver.storage.googleapis.com/index.html)
    
  • 根据每日一报的具体内容编写代码(python实现)
    1)导包:from selenium import webdriver,如果没有,先去pip安装一下selenium
    2)web驱动:bro = webdriver.Chrome(executable_path="chromedriver.exe"),因为我的浏览器驱动直接放在根目录下,所以我的executable_path直接写chromedriver.exe。这样的话我们就获得了一个浏览器对象。
    3)登录:每日一报需要登录,把用户名和密码用字符串保存起来(我用的是文件,这样避免了可以直接被看到密码的这一情况),由于我写的这一个程序也帮舍友写每日一报,因此,我用for循环来遍历每次每人的用户名和密码。
    在这里插入图片描述
    4)获取网页并登录
    我以我的学校为例,首先get到这个网页,解析到用户名和密码框,并把刚才解析到的用户名密码发送过去(我这里用的是find_element_by_xpath解析),右键鼠标,点击“检查”,通过网页代码,来获得classname、id、xpath等等

bro.find_element_by_xpath('//div[@class="slides"]/div[3]//input[@type="text"]').send_keys(username)
bro.find_element_by_xpath('//div[@class="slides"]/div[3]//input[@type="password"]').send_keys(password)

接下来,需要解析“登录”这个按钮(因为这个是提交按钮,所以我用的class来解析的,如果有id,也可以用id来解析)。

 bro.find_element_by_class_name("submit_button").click()

在这里插入图片描述
5)跳转到点击每日一报的界面
当你登录以后,发现页面地址发生了变化,这时需要重新get一下(网址我就不写了,可以根据自己学校的网址尝试)
在这里插入图片描述
获得页面后,我们需要点击“每一一报(daily Report)”这个按钮,道理同上。

bro.find_element_by_class_name("icos").click()

页面跳转,需要重新get一下
6)跳转到填写每日一报的界面
身体状况填写(单选框,填写“良好”或“不适”,写良好之后,下面的“症状Symptom就不需要填了”,如果写的“不适”,则需要填写症状一栏)

bro.find_element_by_id("fineui_2-inputEl-icon").click()

温度填写(一般直接写个37就完事了,想玩玩的话,搞一个个范围内的随机数也行,嘿嘿)

bro.find_element_by_id("p1_TiWen-inputEl")temperature.send_keys("37").send_keys("37")

同理,下面的就是见招拆招,需要填什么,就直接解析什么。
在这里插入图片描述
7)关闭
写完以后,记得关闭这个webdriver,也可以输出一句话来显示每日一报填完了

print("Over!!!")
bro.quit()
  • 总结
    首先,通过webdriver获得浏览器对象,接下来登录、跳转、解析需要填写的东西,最后,提交保存。

  • 代码部分
    我发送的是我们学校的代码,一些解析的地方可能不太对,可根据自己自行修改

 #-*-coding:utf-8-*-

from selenium import webdriver
import time

f=open("user","r")
count=0
for i in f:
    count+=1
f.close()
if __name__ == '__main__':
    f = open("user", "r")
    for i in range(1,(count//2)+1):
        u = f.readline().strip()
        p = f.readline().strip()
        bro = webdriver.Chrome(executable_path="chromedriver.exe")
        # 输入用户名和密码
        bro.get("填写用户名密码的那个界面")
        username = bro.find_element_by_xpath('解析用户名的框')
        time.sleep(1)
        username.send_keys(u)
        password = bro.find_element_by_xpath('解析密码的那个框')
        time.sleep(1)
        password.send_keys(p)
        time.sleep(1)
        bro.find_element_by_class_name("submit_button").click()

        bro.get("登录到“我的界面”")
        time.sleep(1)
        bro.find_element_by_class_name("icos").click()

        bro.get("跳转到填报界面")

        bro.find_element_by_id("fineui_13-inputEl-icon").click()
        bro.find_element_by_id("fineui_15-inputEl-icon").click()
        time.sleep(1)
        # 身体状况填写
        bro.find_element_by_id("fineui_2-inputEl-icon").click()
        time.sleep(1)
        #温度填写
        temperature = bro.find_element_by_id("p1_TiWen-inputEl")
        temperature.send_keys("37")
        time.sleep(1)
        # 是否在校
        bro.find_element_by_id("fineui_10-inputEl-icon").click()
        time.sleep(1)
        bro.find_element_by_id("p1_CheckAddress-inputEl-icon").click()

        # 填写完毕,确认提交
        bro.find_element_by_class_name("f-btn-text").click()
        time.sleep(1)
        # 确认对话框
        bro.find_element_by_id("fineui_39").click()
        time.sleep(2)
        # 提交成功
        bro.find_element_by_id("fineui_44").click()
        time.sleep(1)
        bro.close()
    f.close()

print("Over!!!")
bro.quit()

文章中如果有解释不清楚的地方,在评论区留言或私信。当然,也欢迎大佬指正错误,十分感激。

转载请注明出处

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值