selenium实现问卷星自动填写

前言

在上篇pyppeteer版本的问卷星后写了selenium版本

目标和要求依旧是:

目标网站:https://www.wjx.cn/jq/78696684.aspx

要求:1. 将所有的单选题随机选择
2. 所有的多选题随机选择两个
3. 填空题随便填入一句话
4. 点击提交按钮之前,进行选择是否提交

浏览器驱动

selenium之所以能够操纵浏览器,就是归功于浏览器驱动。
selenium可以通过API接口实现和浏览器驱动的交互,进而实现和浏览器的交互。所以要配置浏览器驱动。

火狐驱动下载地址: http://npm.taobao.org/mirrors/geckodriver/

谷歌驱动下载地址:

https://npm.taobao.org/mirrors/chromedriver/

http://chromedriver.storage.googleapis.com/index.html

**配置浏览器驱动:**下载解压后我直接放在了项目目录下,你也可以放在Python的安装目录下

因为有了pyppeteer版本,所以在这里就不多解释,直接上代码:

import random
from selenium import webdriver


# 这里是单选题
def ans_simple(elements):
	# 从提取的29个元素(看下面的main)中选取单选题,比如下面的0就是第一题
    simple_sel = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 21, 27]
    for i in simple_sel:
        try:
            # 列表里面存放的是元素 使用css选择器提取
            lis = elements[i].find_elements_by_css_selector('ul li')
            # 随机选择一个元素
            li = random.choice(lis)
            # 点击
            li.click()
        except:
            pass


# 这里是多选题
def ans_multiple(elements):
    multiple_sel = [11, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26]
    for j in multiple_sel:
        try:
            lis = elements[j].find_elements_by_css_selector('ul li')
            # choice可能重复 sample不会,k=2选取两个
            li = random.sample(lis, k=2)
            for l in li:
                l.click()
        except:
            pass


# 这里是填空题
def ans_blank(elements):
    fill_blank = [28]
    for k in fill_blank:
        try:
            textarea = elements[k].find_element_by_css_selector('textarea')
            textarea.send_keys('hello world')
        except:
            pass


if __name__ == '__main__':
    driver = webdriver.Chrome(executable_path='chromedriver.exe')
    url = 'https://www.wjx.cn/jq/78696684.aspx'
    driver.get(url)
    # 隐式等待,单位为秒  注意是等页面加载完毕,而不是元素加载,显式等待才是等元素加载
    driver.implicitly_wait(10)
    # 提取29个题目
    elements = driver.find_elements_by_css_selector('.div_question')
    # 执行单选题
    ans_simple(elements)
    # 执行多选题
    ans_multiple(elements)
    # 执行填空题
    ans_blank(elements)
    c = input('请输入1或0(1表示提交,其它表示不提交):')
    if c == 1:
        submit = driver.find_element_by_id('submit_table')
    else:
        driver.quit()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值