python+selenium自动化填写网站

python+selenium自动化填写疫情上报

1.创作目的
最近在学习python,想着如何把他运用起来达到节省时间的目的,所以想到能不能使用python来实现一些网站的自动登录,然后就使用python+selenium仿照别人的代码实现了邮箱登录。接着便思考能不能把这个用来完成学校的每日疫情上报,最终完成了也想分享下思路。这个代码只是用来测试能不能实现该功能,并没有投入到实际使用,上报还是我们需要根据自己实际状况每天如实填写

2.准备工作
2.1 下载安装python,我使用的是3.7版本
2.2 下载安装selenium,pip install selenium
2.3 下载安装chrome浏览器,并安装与浏览器版本相对应chromedriver,并将chromedriver放在chrome的安装目录下
相关的准备步骤网上也有很多详细的介绍,包括下载网址,这里就不贴出来

3.代码

from selenium import webdriver
from selenium.webdriver import ActionChains
import time
# 选择浏览器并将窗口最大化,这里使用的是谷歌浏览器
driver = webdriver.Chrome()
driver.maximize_window()
# 指定连接,这里用于填写学校的上报网站,就不贴出来了用百度代替
url = "https://www.baidu.com/"
# 浏览器获得网址并打开
driver.get(url)
# 等待1秒
time.sleep(1)
# 先清空已存在的用户名和密码,再输入新的,结合图片1查看
driver.find_element_by_xpath("//input[@placeholder='请输入用户名']").clear()
driver.find_element_by_xpath("//input[@placeholder='请输入用户名']").send_keys("123456")
driver.find_element_by_xpath("//input[@placeholder='请输入密码']").clear()
driver.find_element_by_xpath("//input[@placeholder='请输入密码']").send_keys("123456")
driver.find_element_by_xpath("(//button)[1]").click()
time.sleep(1)
# 移动到疫情上报图标并点击进入应用,结合图片2查看
img = driver.find_element_by_xpath("(//img)[10]")
action = ActionChains(driver)
action.move_to_element(img).perform()
driver.find_element_by_xpath("(//div[contains(@class,'p_card_hover_enter')])[2]").click()
time.sleep(5)
#新窗口弹出,切换到新窗口
handle = driver.window_handles
driver.switch_to_window(handle[1])
# 下拉页面
driver.execute_script("window.scrollTo(100, document.body.scrollHeight)")
# 下面是自动填写每日需要填写的选项,结合图3查看,保存按钮忘记截图了
# 输入温度 tmp
tmp = driver.find_element_by_xpath("//input[@data-caption='体温']")
tmp.clear()
tmp.send_keys("36.6")
# 今日本人是否身体不适(包括发烧、... bs
bs = driver.find_element_by_xpath("(//div[contains(@class,'jqx-dropdownlist-content jqx-disableselect')])[11]")
action = ActionChains(driver)
action.move_to_element(bs).click().move_by_offset(0,125).click().perform()
# 本人或家属是否有疫区人员接触史 jc
jc = driver.find_element_by_xpath("(//div[contains(@class,'jqx-dropdownlist-content jqx-disableselect')])[12]")
action = ActionChains(driver)
action.move_to_element(jc).click().move_by_offset(0,125).click().perform()
# 本人或家属是否与疑似或确诊患者接触过 hz
hz = driver.find_element_by_xpath("(//div[contains(@class,'jqx-dropdownlist-content jqx-disableselect')])[13]")
action = ActionChains(driver)
action.move_to_element(hz).click().move_by_offset(0,125).click().perform()
# 本人或家属是否为疑似病例或有确诊病例
qz = driver.find_element_by_xpath("(//div[contains(@class,'jqx-dropdownlist-content jqx-disableselect')])[9]")
action = ActionChains(driver)
action.move_to_element(qz).click().move_by_offset(0,125).click().perform()
# 本人或家属是否被居家隔离或医学隔离
gl = driver.find_element_by_xpath("(//div[contains(@class,'jqx-dropdownlist-content jqx-disableselect')])[10]")
action = ActionChains(driver)
action.move_to_element(gl).click().move_by_offset(0,125).click().perform()
time.sleep(1)
#保存
driver.find_element_by_xpath("//a[@id='save']").click()
# 关闭两个页面
driver.close()
driver.switch_to_window(handle[0])
driver.close()
print("成功录入")

图片1
在这里插入图片描述
图片2
在这里插入图片描述在这里插入图片描述
图片3(蓝色方框圈住的为每天需要填写的选项,其余是已经默认填写好了)
蓝色

4.总结反思
谈谈自己遇到的问题
1.handle = driver.window_handles driver.switch_to_window(handle[1])这个网站实际有三次页面刷新,但前两次都是同一个窗口,最后一次却打开了一个新的窗口,而我忽视了这个问题,导致一直找不到指定元素,还以为是xpath写错了。所以当浏览器打开了新的窗口,记得切换过去。
2.当你想要点击某个按钮或是在输入框输入东西的时候,首先是要让浏览器找到相关的页面元素,一般通过id是很方便的,但很多元素并没有,所以建议使用xpath,可以先去网上查找相关语法,使用时也可以在谷歌浏览器先进行测试,看看是否能准确找到。不过我在使用的时候发现有些语句在谷歌浏览器能找到指定元素,但火狐却不行。
3.图片2的进入应用也坑了我一小会,最开始一直找不到元素,后来发现需要先将鼠标移动到图标那,进入应用才会出现,所以需要使用action让鼠标停在图标那。img = driver.find_element_by_xpath("(//img)[10]") action = ActionChains(driver) action.move_to_element(img).perform()
4.time.sleep(1)推迟调用,因为浏览器的点击速度非常快,如果不在适当使用进行推迟,会导致页面元素还没加载完系统就开始查找元素,这样往往是系统找不到指定元素然后报错,所以需要适当停止,一般是在页面更新切换的时候。
5.关于下拉框的操作,试了多种方法,最终决定的方法是获取该组件,点击,出现选项,鼠标向下移动到指定位置,点击,完成操作。这只是简单分享思路,当初模拟登录qq邮箱可没这么复杂,就是需要进入框架,按钮输入框什么的获取也十分简单,但这个上报网站就比较麻烦。

hz = driver.find_element_by_xpath("(//div[contains(@class,'jqx-dropdownlist-content jqx-disableselect')])[13]")
action = ActionChains(driver)
action.move_to_element(hz).click().move_by_offset(0,125).click().perform()

5.这是我写的第一篇文章,代码也存在很多不足和可以优化,如我错误或是不严谨的地方,也欢迎在评论区指出,感谢。然后是如果写了别的代码,要如何投入使用呢,我是将其压缩成exe文件,然后放在服务器上,然后使用任务计划程序每天定时调用即可。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值