1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| # 某问卷全自动化填写问卷 思政作业想偷懒写的emmm... # Author:isyang_ # 声明: # 本脚本不得用于售卖和非法用途,仅用于学习 # 脚本使用了selenium和pyautogui进行模拟登录和鼠标宏全自动化答卷 # 使用本脚本需要安装最新的chrome浏览器 # 不同问卷需要根据代码进行重构,比如改题目数量,题目选项结构,题目xpath,以及提交按钮的坐标,具体见代码注释
import time import random import pyautogui from selenium import webdriver from selenium.webdriver.common.by import By
def spider(num, url): for i in range(num): option = webdriver.ChromeOptions() # 创建一个chrome浏览器选项对象 option.add_experimental_option('excludeSwitches', ['enable-automation']) # 禁用参数,防止脚本被检测 option.add_experimental_option('useAutomationExtension', False) # 禁用浏览器扩展(提高脚本稳定性)
browser = webdriver.Chrome(options=option) # 创建一个Chrome对象
# 向浏览器发送一个控制命令,将 "webdriver" 属性设置为 undefined。这可以防止浏览器检测到自动化脚本,从而提高脚本在浏览器中的稳定性 browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'}) browser.maximize_window() # 窗口最大化
# 再次将 "webdriver" 属性设置为 undefined。 browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})' })
browser.get(url) # 使用浏览器对象访问指定url time.sleep(2)
# 设置自动答题的配置 # range中的范围是你的总题目数 for question_num in range(1, 12): if question_num <= 3: # 设置多选题的配置,这里为1-3题,选项为A-E,这里我设置的是A-C中随机选一个,D-E中随机选一个 num1 = random.randint(1, 3) num2 = random.randint(4, 5) elif question_num <= 8: # 设置单选题,这里为4-8题,选项为A-D num1 = random.randint(1, 4) num2 = None else: # 设置判断题(双选题),这里为9-12题 num1 = random.randint(1, 2) num2 = None
# 拼接xpath路径 让浏览器找到对应的元素并且模拟鼠标点击 if num2 is not None: if browser.find_element(by=By.XPATH, value=f"//div[@for='q{question_num}_{num1}']"): browser.find_element(by=By.XPATH, value=f"//div[@for='q{question_num}_{num1}']").click() browser.find_element(by=By.XPATH, value=f"//div[@for='q{question_num}_{num2}']").click() else: if browser.find_element(by=By.XPATH, value=f"//div[@for='q{question_num}_{num1}']"): browser.find_element(by=By.XPATH, value=f"//div[@for='q{question_num}_{num1}']").click() time.sleep(0.5)
pyautogui.scroll(-500) # 移动鼠标滚轮到最下面 time.sleep(1) pyautogui.moveTo(1274, 1364) # 将鼠标移动到指定位置(提交按钮) time.sleep(3) pyautogui.click() # 点击鼠标 time.sleep(5) browser.close() # 关闭浏览器 print(f"第{i + 1}份已经完成")
if __name__ == '__main__': num = 1000 # 填的份数 url = 'https://www.xxxxx.com' # 问卷链接 spider(num, url)
|