某调查问卷,一共17题,每题5选项,第一项总是最好的评价,这样省的我判定哪一项是最好的了。问卷的最后是填写投票人的个人信息。
代码
from selenium import webdriverimport timeimport xlrdbrowser = 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,phonedef _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
上 好像一大堆。需要学习。