Python自动填写问卷星
在前段时间自己编写了一段Selenium的问卷星自动填写的代码(当然是不包含识别验证码的工序的),在应用的过程中,发现了代码修改比较麻烦,每个click控件的选项上都需要添加一次xpath路径,在选择题较少的情况下,情况还好,但是选择题的数目和选项一旦增多就会造成代码修改的复杂程度。下面给出一个表做一个形象的说明
数量 | 添加xpath次数 |
---|---|
10道题 每道题4个选项 | 40 |
30道题 每道题4个选项 | 120 |
30道题 每道题8个选项 | 240 |
添加如此多次的xpath路径,会造成不必要的麻烦,xpath路径具有一定的规律性,比如说我这篇问卷
- 第一道题的A选项://*[@id=“divquestion1”]/ul/li[1]/a
- 第一道题的B选项://*[@id=“divquestion1”]/ul/li[2]/a
- 第二道题的A选项://*[@id=“divquestion2”]/ul/li[1]/a
你们是否已经发现了规律呢?当然我们还是重申一下需要用到的几个函数吧
需要用到的一些知识
- random.choice(),括号里面可以放一个列表,这样可以随机输出列表当中的某个元素
- xpath定位网页元素
driver.find_element_by_xpath
- 对元素进行操作,有点击click和填入send_keys
- 字符串的拼接 ‘’//*[@id=“divquestion’ + str(m) + '”]/ul/li[’ + str(q) + ‘]/a’’
- 函数体的设计以及if-else选择语句
一、问卷形式
Ⅰ、只有单选题的问卷
from selenium import webdriver
import random
# //*[@id="divquestion1"]/ul/li[2]/a
def monomial_choice(m, n): # m为题号 n为选项数
q = random.choice(list(range(1, n + 1)))
xpath = '//*[@id="divquestion' + str(m) + '"]/ul/li[' + str(q) + ']/a'
driver.find_element_by_xpath(xpath).click()
for i in range(100):
driver = webdriver.Chrome()
driver.get('https://www.wjx.cn/jq/88552774.aspx')
for m in range(1, 11):
if m == 2:
monomial_choice(m, 4) # 第二题四个选项
else:
monomial_choice(m, 5) # 除了第二题都有五个选项
driver.find_element_by_xpath