zoukankan      html  css  js  c++  java
  • 最近写了个自动填写调查的问卷的简单爬虫

    某调查问卷,一共17题,每题5选项,第一项总是最好的评价,这样省的我判定哪一项是最好的了。问卷的最后是填写投票人的个人信息。

    代码

    from selenium import webdriver
    import time
    import xlrd
    
    browser = webdriver.Firefox(executable_path=r'geckodriver')
    browser.implicitly_wait(10)
    
    def _choose():
        browser.get("网址") 
        for i in range(1,18): #选择每一题的第一个选项(最好的评价)
            browser.find_element_by_id("Q%d_rbt1"%i).click()
    
    def _rdinfo(num):
            #从文件的第二行开始读取,目前没有加入读取完就删除。列表中好像有个方法叫读取后删除
        name = sheet.cell(num,0).value
        phone = sheet.cell(num,1).value
        return name,phone
    
    def _wtinfo(name,phone):
        email = phone+'@189.cn'
        browser.find_element_by_id("userName").send_keys(name)
        browser.find_element_by_id("phone").send_keys(phone)
        browser.find_element_by_id("email").send_keys(email)
        time.sleep(8) #给我手动输入验证码的时间
        browser.find_element_by_id("SubmitBtn").click()
    
    if __name__ == '__main__':  
        _choose() 
        data = xlrd.open_workbook('文件路径')
        sheet = data.sheets()[0]
        num = 1
        for i in range(1,13):
            name,phone = _rdinfo(num) #返回值赋值给两个变量
            _wtinfo(name,phone)
            num += 1
            time.sleep(5)  #每个投票间隔5s,然而事实证明一个IP只能投3个
            _choose()
            print ('第%d个投票'%num)
        print ('完成!')
    

    不足之处

    三级标题

    • 问卷的最后是个人信息,我采用遍历Excel内容的方式。中建执行过程 中断了两次,这样我就不知道遍历到哪里了,只能看print的信息。后面仔细想想应该采用list读取后删除的方法。等中断的时候再把剩余的list写入到文件。
    list.pop(obj=list[-1])     #移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
    
    • selenium提供的xpath查找方法非常方便,可是一定要注意是否在同一个frame或者window。我因为这个而选不到元素费了半天劲。

    • 程序并没有完全自动化,提交问卷之前有个验证码,需要我手动输入。因此如果能加个识别验证码的包就好了,GitHub上 好像一大堆。需要学习。

  • 相关阅读:
    Jackcard类似度和余弦类似度(向量空间模型)的java实现
    Android Wear之android穿戴式设备应用开发平台
    poj 2955 Brackets 括号匹配 区间dp
    Gradle自己定义插件
    C语言之基本算法11—牛顿迭代法求平方根
    jquery ajax实现省市二级联动
    从0開始学习 GitHub 系列之「07.GitHub 常见的几种操作」
    Android Widget和悬浮窗 原理
    怎样推断一个数的二进制有多少个1
    Mac OSX Yosemite 10.10 brew 错误:mktemp: mkdtemp failed on /tmp/git-LIPo: No such file or directory
  • 原文地址:https://www.cnblogs.com/aubucuo/p/votespider.html
Copyright © 2011-2022 走看看