python实现问卷星自动填写(可以跳过智能验证)
生活随笔
收集整理的這篇文章主要介紹了
python实现问卷星自动填写(可以跳过智能验证)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近有一個社會實踐需要做問卷調查,突發奇想搞一個自動化腳本,省事省米
1?下載依賴selenium
selenium是一款網頁爬蟲重要的工具。
2? 安裝chrome驅動
這里需要準備chrome瀏覽器以及對應的驅動。需要注意的是驅動的版本需要和chrome保持一致。
chrome瀏覽器版自行查看本機安裝版本。
chrome驅動下載鏈接?chrome驅動鏈接找到對應版本的驅動。?
?
下載后將安裝包解壓(解壓后為.exe文件)在這個文件夾下?
?
??3 導入相關的包
from selenium import webdriver import time import random from selenium.webdriver.common.by import By import pyautogui防止被識別為腳本
option = webdriver.ChromeOptions()option.add_experimental_option('excludeSwitches', ['enable-automation'])option.add_experimental_option('useAutomationExtension', False)browser = webdriver.Chrome(options=option)browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})browser.maximize_window() # 窗口最大化# 這行代碼的作用是將webdriver這個屬性置為undefinedbrowser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})browser.get(url)time.sleep(2)??
代碼如下
# -*- coding: utf-8 -*- # @Time : 2023/1/26 11:34 # @Author : wkk # @File : Python自動化填問卷星.py from selenium import webdriver import time import random from selenium.webdriver.common.by import By import pyautoguidef run(num, url):for i in range(num):option = webdriver.ChromeOptions()option.add_experimental_option('excludeSwitches', ['enable-automation'])option.add_experimental_option('useAutomationExtension', False)browser = webdriver.Chrome(options=option)browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})browser.maximize_window() # 窗口最大化# 這行代碼的作用是將webdriver這個屬性置為undefinedbrowser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})browser.get(url)time.sleep(2)num1 = random.randint(1, 2)if browser.find_element(by=By.XPATH, value=f"//div[@for='q1_{num1}']"):browser.find_element(by=By.XPATH, value=f"//div[@for='q1_{num1}']").click()time.sleep(0.5)num2 = random.randint(1, 3)if browser.find_element(by=By.XPATH, value=f"//div[@for='q2_{num2}']"):browser.find_element(by=By.XPATH, value=f"//div[@for='q2_{num2}']").click()time.sleep(0.5)num3 = random.randint(1, 3)if browser.find_element(by=By.XPATH, value=f"//div[@for='q3_{num3}']"):browser.find_element(by=By.XPATH, value=f"//div[@for='q3_{num3}']").click()time.sleep(0.5)num4 = random.randint(1, 3)if browser.find_element(by=By.XPATH, value=f"//div[@for='q4_{num4}']"):browser.find_element(by=By.XPATH, value=f"//div[@for='q4_{num4}']").click()time.sleep(0.5)num5 = random.randint(1, 2)if browser.find_element(by=By.XPATH, value=f"//div[@for='q5_{num5}']"):browser.find_element(by=By.XPATH, value=f"//div[@for='q5_{num5}']").click()time.sleep(0.5)num6 = random.randint(1, 3)if browser.find_element(by=By.XPATH, value=f"//div[@for='q6_{num6}']"):browser.find_element(by=By.XPATH, value=f"//div[@for='q6_{num6}']").click()time.sleep(0.5)num7 = random.randint(1, 4)if browser.find_element(by=By.XPATH, value=f"//div[@for='q7_{num7}']"):browser.find_element(by=By.XPATH, value=f"//div[@for='q7_{num7}']").click()time.sleep(0.5)# num8 = random.randint(1, 3)# if browser.find_element(by=By.XPATH, value=f"//div[@for='q8_{num8}']"):# browser.find_element(by=By.XPATH, value=f"//div[@for='q8_{num8}']").click()# time.sleep(0.5)# 問題5randomId = random.randint(1, 3) # 隨機數選擇(選多少個)for i in range(1, randomId + 1): # 循環 實現多選效果randomId1 = random.randint(1, 3) # 隨機選擇第1到第6個選項之一# 兩種js實現方式js = "document.getElementById(\"q8_" + str(randomId1) + "\").checked = true"browser.execute_script(js)# 延時time.sleep(1)num9 = random.randint(1, 7)if browser.find_element(by=By.XPATH, value=f"//div[@for='q9_{num9}']"):browser.find_element(by=By.XPATH, value=f"//div[@for='q9_{num9}']").click()time.sleep(0.5)num10 = random.randint(1, 3)if browser.find_element(by=By.XPATH, value=f"//div[@for='q10_{num10}']"):browser.find_element(by=By.XPATH, value=f"//div[@for='q10_{num10}']").click()time.sleep(0.5)if browser.find_element(by=By.XPATH, value="//div[@class='submitbtn mainBgColor']"):browser.find_element(by=By.XPATH, value="//div[@class='submitbtn mainBgColor']").click()time.sleep(1)try:element = browser.find_element(By.CSS_SELECTOR, "#alert_box > div:nth-child(2) > div:nth-child(2) > button")element.click()time.sleep(1)yanz = browser.find_element(By.ID, "rectMask")yanz.click()time.sleep(4)except:pass# 先點確認try:browser.find_element(By.XPATH, '//*[@id="layui-layer1"]/div[3]/a[1]').click()time.sleep(1)except:pass# 再點智能驗證提示框,進行智能驗證try:browser.find_element(By.XPATH, '//*[@id="SM_BTN_WRAPPER_1"]').click()time.sleep(3)except:pass# 滑塊驗證pyautogui.moveTo(789, 805, duration=1) # 傳入屏幕的位置time.sleep(0.5)pyautogui.dragRel(370, 0, duration=0.8) # 拖動# pyautogui.moveTo(789, 805, duration=1) # 回到原處# pyautogui.moveRel(370, 0, duration=1)# pyautogui.dragRel(256, 0, duration=0.8)# pyautogui.moveTo(789, 805)# time.sleep(0.5)# pyautogui.dragRel(370, 0, duration=0.8)time.sleep(5)browser.close()print(f"第{i + 1}份已經完成")if __name__ == '__main__':num = 10 # 填的份數url = 'https://www.wjx.cn/vm/tXQkrbD.aspx' # 鏈接run(num, url)以上代碼是我根據我自己的問卷形式來的,具體參數還得跟著問卷走,代碼親測有效,當短時間內刷的問卷數過多時,可能會出現第二重智能驗證,這就要手動驗證了哦,所以為了防止出現二重智能驗證,在每提交完一份問卷后,要用time.sleep函數用于延時 ,?避免提交過快。
本文僅為技術交流,最好不要用來惡意填寫別人的問卷,以造成問卷質量低下的情況,請大家還是根據自己的實際情況填寫問卷哦。?
總結
以上是生活随笔為你收集整理的python实现问卷星自动填写(可以跳过智能验证)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win10 如何修改默认软件安装路径
- 下一篇: 数据分析真题日刷 | 欢聚时代2018校