1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > selenium+chromedriver实现自动填写问卷星问卷

selenium+chromedriver实现自动填写问卷星问卷

时间:2020-02-03 06:49:13

相关推荐

selenium+chromedriver实现自动填写问卷星问卷

Readme

1.chromedriver以及selenium的安装及配置方法,本篇不详述

2.建议自己先进行网页元素检查(ctrl+shift+i),涉及到的相关知识点,本篇不详述

3.当前版本仅支持无跳转的单选题和多选题,后续版本持续更新中…

4.截至本文发布日,程序能够顺利运行,后期运行过程若出现bug,欢迎私聊

代码演示

from selenium import webdriverimport timeimport random# 设置代理ipchrome_options = webdriver.ChromeOptions()chrome_options.add_argument("--proxy-server=193.112.128.212:8118")# 此处为设置的代理ip,可自行搜索更改# 替换webdriver.Chrome的内置选项driver = webdriver.Chrome(chrome_options=chrome_options)# 获取问卷问题def get_questions(url):# 模拟登录问卷driver.get(url)# 通过class定位问卷题目所在tagquestions = driver.find_elements_by_class_name('div_question')return questions# list类型# 获取问题的选项def get_question_options(question):# 通过<a>标签定位问题的选项options = question.find_elements_by_tag_name('a')return options# list类型# 判断问题的类型def judge_question_type(question):options = get_question_options(question)# 通过第一个选项的class属性判断问题类型option1_class = options[0].get_attribute('class')question_type = ''if option1_class == 'jqRadio':# 单选题question_type = 'single'elif option1_class == 'jqCheckbox':# 多选题question_type = 'multiple'return question_type# 处理单选题# random_option:随机选项# question_num:题号def process_single_question(random_option, question_num):# 通过xpath语法定位到option# 具体xpath语法用法在此不详述,请自行搜索option = driver.find_element_by_xpath("//div[@id='divquestion{}']//a[@rel='q{}_{}']".format(question_num, question_num, random_option))option.click() # 点击选项time.sleep(1)# 设置等待时间,预防ip被封# 处理多选题# random_options:多个随机选项(list)# question_num:题号def process_multiple_question(random_options, question_num):for ro in random_options:option = driver.find_element_by_xpath("//div[@id='divquestion{}']//a[@rel='q{}_{}']".format(question_num, question_num, ro))option.click()time.sleep(1)def main(url):questions = get_questions(url)question_count = len(questions)# 问题个数for i in range(question_count):question_num = i + 1# 题号question_type = judge_question_type(questions[i])# 问题类型options = get_question_options(questions[i])# 问题选项(list)option_count = len(options)# 选项个数if question_type == single':random_option = random.randint(1, option_count)process_single_question(random_option, question_num)time.sleep(1)elif question_type == 'multiple':select_count = random.randint(1, option_count)random_options = random.sample(range(1, option_count + 1), select_count)process_multiple_question(random_options, question_num)time.sleep(1)# 通过class='submitbutton'定位到提交按钮submit_button = driver.find_element_by_class_name('submitbutton')# 点击提交submit_button.click()time.sleep(1)if __name__ == '__main__':url = "url"# 此处为问卷的urlfor i in range(10):main(url)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。