通过Selenium批量填写问卷

本文介绍了一个基于Python和Selenium技术的自动化工具,用于批量填写问卷,通过随机User-Agent和XPath选择题目的选项,实现高效处理重复的问卷填写任务。
摘要由CSDN通过智能技术生成

起因

为啥要做这个呢。因为某天老婆让我帮她填问卷,而且是填几十份一模一样的,点的我鼠标都要冒烟了。所以研究下自动化工具,咱肯定不能一个个手工去点呀。

实现过程

  1. 用edge打开浏览器

    driver = webdriver.Edge(options=self.option)
    # 随机User-agent
    num = random.randint(0, 2)
    driver.execute_cdp_cmd("Network.setUserAgentOverride", {"userAgent": self.ua[num]})
    # 将webdriver属性置为undefined
    driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',
                           {'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})
    
    driver.get(self.wj_url)
    
  2. 获取页面上的所有题目,进行遍历

    questions = driver.find_elements(By.CLASS_NAME, "field.ui-field-contain")
    for i in range(1, len(questions) + 1):
        xpath = '//*[@id="div{}"]'.format(i)
        question = driver.find_element(By.XPATH, xpath)
        # 获取题目类型
        ques_type = question.get_attribute("type")
    
  3. 根据题目类型对题目进行处理,读取设定好的选项,进行填写。以单选题为例

    def single_choice(driver, id, prob, idx):
        xpath = '//*[@id="div{}"]/div[2]/div'.format(id)
        answers = driver.find_elements(By.XPATH, xpath)
        # 如果没有传入比例,默认为等比例
        p = preprocess_prob(prob.get(idx), len(answers))
        choice = numpy.random.choice(a=numpy.arange(1, len(answers) + 1), p=p)
        xpath = '//*[@id="div{}"]/div[2]/div[{}]'.format(id, choice)
        # driver.find_element(By.XPATH, xpath).click()
        ActionChains(driver).move_to_element(driver.find_element(By.XPATH, xpath)).click().perform()
        idx += 1
        return idx
    

    其中选项的比例是由如下代码计算的

    def preprocess_prob(prob, length):
        """计算该选项的比例"""
        if len(prob) == 0:
            prob = numpy.ones(length)
        return [i/sum(prob) for i in prob]
    

完整代码链接:https://github.com/h-kayotin/kayotin_sel

如何使用

请安装所需的库:requests、numpy、Selenium

  1. 在config.py中设定问卷答案:

    # 设置每个问题的填写情况,按照每个选项的概率填写。例如ABCD对应1111的话,就是各25%
    # !!! 注意:选项长度一定要和实际一样,否则会报错
    answers = {
        1: [1, 0],
        2: [1, 0, 0, 1],
        3: [1, 1, 0, 0, 0],
    }
    
    # 简答题,需要设置好文本;如没有请无视即可
    answer_list = {
        6: ["文本1", "文本2"]
    }
    

    以上的问题代表了这个问卷的填写情况:问卷链接

  2. 在config.py中填写代理IP(选填:如果不使用代理IP,这个api里保持如下就行,但不能为空

    # 实际上不使用代理也可以,无非就是做的多了会有验证
    api = "https://service.ipzan.com/core-extract"
    
  3. 运行主程序auto_wjx.py,选择做多少份

        my_url = "https://www.wjx.cn/vm/rJoCZrn.aspx"
        my_wjx = MyWjx(my_url, 10)
        my_wjx.fill_in()  # 做1份
    	  my_wjx.do_works()  # 做10份
    

参考链接:

该工具很大程度上参考了如下链接:

https://github.com/zzmvp-1/wjx-auto-fill

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值