• 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几个小时人写的代码,肯定有很多不规范的地方,大佬看见不要嫌弃(当然,大佬也不会看我这个。。。)

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

  • 相关阅读:
    MxNet Windows下安装
    Binary Tree Postorder Traversal--leetcode难题讲解系列
    Populating Next Right Pointers in Each Node II--leetcode难题讲解系列
    Recover Binary Search Tree--leetcode难题讲解
    bash + script
    Linux笔记
    谷歌面经 Tree Serialization
    Python strange questions list
    bit操作 转
    ubuntu系统从中文环境改成英文环境
  • 原文地址:https://www.cnblogs.com/haheihei/p/12810915.html
Copyright © 2020-2023  润新知