疫情一开始就天天让填问卷,每次填我都感觉好麻烦的,但一直没有解决办法。直到最近我开始学爬虫,最初也只是爬取一些简单的静态网页,后来感觉没有意思了,前天去漫画网站爬取了一部漫画的全部章节,他的内容没有直接展示出来,而是将地址写在了js中,我还是那种爬取静态网页的思维直接查看源码,后来折腾了有一会,才想起来要看看js操作,这时我就觉得单学会爬取静态网页就太菜了,还是要学学爬取动态网页。
就在今天,我搜了搜爬取动态网站的方法,将近一半的帖子告诉我要分析网页的network和js问件。我觉得network分析是很有必要的,但是呢这个js,我就实在是不太明白,有的网页数据数据有加密算法的,我这小脑子根本分析不出来。
我终于看到了一篇Selenium的博客,我就安装试了试,发现它可以操作页面交互。还可以输入文字,what???真的是太强了,我首先就想到了实现让这个疫情问卷自动填写的功能。
1、首先加载驱动,请求网址,这步他会自动打开浏览器。
1 browser = webdriver.Edge(executable_path='F:\Python\msedgedriver.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几个小时人写的代码,肯定有很多不规范的地方,大佬看见不要嫌弃(当然,大佬也不会看我这个。。。)
总结:感觉真的好强,明天再往深了学习一下,把那个漫画网站给他遍历一遍。
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("----填表完成----")