python学法用法 自动刷分_Python selenium模拟手动操作实现无人值守刷积分功能

def DaTi(): driver.get(url = 'https://pc.xuexi.cn/points/exam-practice.html') elem_juje = WebDriverWait(driver,100).until(EC.presence_of_element_located((By.XPATH,'//div[@class="q-header"]'))) juje = elem_juje.get_attribute('innerText') # 在每日答题中,有三类题,判断题、选择题、填空题,所以先获取题的类别 # 注意 特别需要注意的是 By.XPATH 和 xpath 文本获取稍有却别,By.XPATH 获取文本方式为.get_attribute('innerText') time.sleep(1) # 等待一秒,其实也无所谓,但是为防止过快操作造成电脑卡顿,还是等待一秒。 if '选' in juje: elem_tishi = WebDriverWait(driver, 100).until(EC.presence_of_element_located((By.XPATH, '//span[@class="tips"]'))) elem_tishi.click() # 在答题中,答案在查看提示中以红色标记,所以首先要模拟点击查看答案,使答案加载 time.sleep(0.5) elem_answer = WebDriverWait(driver, 100).until(EC.presence_of_all_elements_located((By.XPATH, '//div[@class="line-feed"]/font'))) # 提取红色标记的文字,即答案 time.sleep(0.5) # 同样没什么实际意义 ans_lis = [] for elem in elem_answer: ans_lis.append(elem.get_attribute('innerText')) # 因为选择题嘛,不一定就是单选题,所以要存放这些答案,以便于在选项中找答案 print('得到答案') time.sleep(0.5) # 同样没什么实际意义 elem_juje.click() # 再次模拟点击的原因是 此时 查看提示 框还处于打开状态,如果不关闭,会影响提交答案的操作 # 模拟点击网页,关闭 查看提示 框 time.sleep(0.5) elem_xuanxiang = WebDriverWait(driver, 100).until(EC.presence_of_all_elements_located((By.XPATH, '//div[@class="question"]/div[@class="q-answers"]/div[contains(@class,"q-answer")]'))) # 获取所有的选项节点 for elem in elem_xuanxiang: data = elem.get_attribute('innerText')[3:].replace('-','') print(data) for i in ans_lis: if i in data: elem.click() ans_lis.remove(i) # 根据依次A -- > D 遍历答案,将两者对照进行选择与否,所以满足要求后去除该答案 # 防止对选项多次点击造成取消选择或其他错误 time.sleep(0.5) #防止过快操作,每次选择后等待0.5秒 break elem_next = WebDriverWait(driver, 100).until(EC.presence_of_element_located((By.XPATH,'//div[@class="action-row"]/button'))) elem_next.click() # 模拟点击确定按钮跳转下一题 DaTi(driver) elif '填' in juje: elem_tishi = WebDriverWait(driver,100).until(EC.presence_of_element_located((By.XPATH,'//span[@class="tips"]'))) elem_tishi.click() time.sleep(0.5) elem_answer = WebDriverWait(driver,100).until(EC.presence_of_element_located((By.XPATH,'//div[@class="line-feed"]'))) time.sleep(0.5) if '请观看视频' in elem_answer.get_attribute('innerText'): input('手动选择答案后无需点击确定,在此输入回车继续') elem_next = WebDriverWait(driver, 100).until(EC.presence_of_element_located((By.XPATH, '//div[@class="action-row"]/button'))) elem_next.click() # 在填空题中会有观看视频的题目,而且查看提示中会写‘请观看视频'而不会直接给出答案,所以要人工选择 elem_answer = WebDriverWait(driver,100).until(EC.presence_of_all_elements_located((By.XPATH,'//div[@class="line-feed"]/font'))) answer = [] time.sleep(0.5) for elem in elem_answer: answer.append(elem.get_attribute('innerText')) # 同样填空题中也有多个空的情况,所以将答案放在列表里 time.sleep(1) elem_data = WebDriverWait(driver,100).until(EC.presence_of_all_elements_located((By.XPATH,'//input[@class="blank"]'))) # 找到每个空 for i in range(len(answer)): elem_data[i].send_keys(answer[i]) time.sleep(0.5) # 通过遍历空,将对应的答案写入 elem_data[0].click() time.sleep(1) # 模拟点击网页,因为在写完空后,不点击网页会有确定按钮为不可点的情况 elem_next = WebDriverWait(driver,100).until(EC.presence_of_element_located((By.XPATH,'//div[@class="action-row"]/button'))) elem_next.click() DaTi(driver) elif '判' in juje:# 同上,判断题不会直接给出答案,所以只能手动吧 input('手动选择答案后无需点击确定,在此输入回车继续') elem_next = WebDriverWait(driver, 100).until(EC.presence_of_element_located((By.XPATH, '//div[@class="action-row"]/button'))) elem_next.click() DaTi(driver)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值