Selenium实现自动填写疫情问卷

疫情一开始就天天让填问卷,每次填我都感觉好麻烦的,但一直没有解决办法。直到最近我开始学爬虫,最初也只是爬取一些简单的静态网页,后来感觉没有意思了,前天去漫画网站爬取了一部漫画的全部章节,他的内容没有直接展示出来,而是将地址写在了js中,我还是那种爬取静态网页的思维直接查看源码,后来折腾了有一会,才想起来要看看js操作,这时我就觉得单学会爬取静态网页就太菜了,还是要学学爬取动态网页。

就在今天,我搜了搜爬取动态网站的方法,将近一半的帖子告诉我要分析网页的network和js问件。我觉得network分析是很有必要的,但是呢这个js,我就实在是不太明白,有的网页数据数据有加密算法的,我这小脑子根本分析不出来。

我终于看到了一篇Selenium的博客,我就安装试了试,发现它可以操作页面交互。还可以输入文字,what???真的是太强了,我首先就想到了实现让这个疫情问卷自动填写的功能。

1、首先加载驱动,请求网址,这步他会自动打开浏览器。

1 browser = webdriver.Edge(executable_path='F:Pythonmsedgedriver.exe')
2 browser.get('https://jinshuju.net/f/HmxaWh')

2、然后我就开始分析我们那个问卷网页的元素,获取表单项。

containers=browser.find_elements_by_class_name("field-container")

3、我们那个表单一共15项,但是最后一项是提交按钮,我就没敢写,怕程序出错,数据填错了就给交了。。。。

containers[0].find_element_by_tag_name('input').send_keys(time.strftime("%Y-%m-%d",time.localtime(time.time())))     #日期
containers[1].find_element_by_css_selector("label.ant-radio-wrapper").click()                     #班级
containers[2].find_element_by_tag_name("input").send_keys("姓名")           #姓名
containers[3].find_element_by_tag_name("input").send_keys("36."+str(((int)(random.random()*10))))           #早温度
containers[4].find_element_by_tag_name("input").send_keys("36."+str(((int)(random.random()*10))))           #中温度
containers[5].find_elements_by_css_selector('input').pop().click()           #接触(否)
containers[6].find_elements_by_css_selector('input').pop().click()           #感染(否)
containers[7].find_element_by_tag_name("input").send_keys("36."+str(((int)(random.random()*10)))+"/36."+str(((int)(random.random()*10)))+
                                                          ",36."+str(((int)(random.random()*10)))+"/36."+str(((int)(random.random()*10))))    #同住体温
containers[8].find_elements_by_css_selector('input').pop().click()           #(同)接触(否)
containers[9].find_elements_by_css_selector('input').pop().click()           #(同)感染(否)
containers[10].find_element_by_css_selector("button").click()           #位置
time.sleep(1)                                                           #暂停1s,等待元素出现
containers[10].find_element_by_css_selector("div.search-box input").send_keys("位置")          #位置(输入)
containers[11].find_elements_by_css_selector('input').pop().click()           #居住变化
containers[12].find_element_by_tag_name('input').send_keys("")           #居住变化
containers[13].find_element_by_tag_name('input').click()           #导员
print("----填表完成----")

4、这是刚学了Selenium几个小时人写的代码,肯定有很多不规范的地方,大佬看见不要嫌弃(当然,大佬也不会看我这个。。。)

 总结:感觉真的好强,明天再往深了学习一下,把那个漫画网站给他遍历一遍。

原文地址:https://www.cnblogs.com/haheihei/p/12810915.html