python实现问卷星自动填写(可以跳过智能验证)
最近有一個(gè)社會(huì)實(shí)踐需要做問卷調(diào)查,突發(fā)奇想搞一個(gè)自動(dòng)化腳本,省事省米
1?下載依賴selenium
selenium是一款網(wǎng)頁爬蟲重要的工具。
2? 安裝chrome驅(qū)動(dòng)
這里需要準(zhǔn)備chrome瀏覽器以及對(duì)應(yīng)的驅(qū)動(dòng)。需要注意的是驅(qū)動(dòng)的版本需要和chrome保持一致。
chrome瀏覽器版自行查看本機(jī)安裝版本。
chrome驅(qū)動(dòng)下載鏈接?chrome驅(qū)動(dòng)鏈接找到對(duì)應(yīng)版本的驅(qū)動(dòng)。?
?
下載后將安裝包解壓(解壓后為.exe文件)在這個(gè)文件夾下?
?
??3 導(dǎo)入相關(guān)的包
from selenium import webdriver import time import random from selenium.webdriver.common.by import By import pyautogui防止被識(shí)別為腳本
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這個(gè)屬性置為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自動(dòng)化填問卷星.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這個(gè)屬性置為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) # 隨機(jī)數(shù)選擇(選多少個(gè))for i in range(1, randomId + 1): # 循環(huán) 實(shí)現(xiàn)多選效果randomId1 = random.randint(1, 3) # 隨機(jī)選擇第1到第6個(gè)選項(xiàng)之一# 兩種js實(shí)現(xiàn)方式j(luò)s = "document.getElementById(\"q8_" + str(randomId1) + "\").checked = true"browser.execute_script(js)# 延時(shí)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# 先點(diǎn)確認(rèn)try:browser.find_element(By.XPATH, '//*[@id="layui-layer1"]/div[3]/a[1]').click()time.sleep(1)except:pass# 再點(diǎn)智能驗(yàn)證提示框,進(jìn)行智能驗(yàn)證try:browser.find_element(By.XPATH, '//*[@id="SM_BTN_WRAPPER_1"]').click()time.sleep(3)except:pass# 滑塊驗(yàn)證pyautogui.moveTo(789, 805, duration=1) # 傳入屏幕的位置time.sleep(0.5)pyautogui.dragRel(370, 0, duration=0.8) # 拖動(dòng)# 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}份已經(jīng)完成")if __name__ == '__main__':num = 10 # 填的份數(shù)url = 'https://www.wjx.cn/vm/tXQkrbD.aspx' # 鏈接run(num, url)以上代碼是我根據(jù)我自己的問卷形式來的,具體參數(shù)還得跟著問卷走,代碼親測(cè)有效,當(dāng)短時(shí)間內(nèi)刷的問卷數(shù)過多時(shí),可能會(huì)出現(xiàn)第二重智能驗(yàn)證,這就要手動(dòng)驗(yàn)證了哦,所以為了防止出現(xiàn)二重智能驗(yàn)證,在每提交完一份問卷后,要用time.sleep函數(shù)用于延時(shí) ,?避免提交過快。
本文僅為技術(shù)交流,最好不要用來惡意填寫別人的問卷,以造成問卷質(zhì)量低下的情況,請(qǐng)大家還是根據(jù)自己的實(shí)際情況填寫問卷哦。?
總結(jié)
以上是生活随笔為你收集整理的python实现问卷星自动填写(可以跳过智能验证)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win10 如何修改默认软件安装路径
- 下一篇: python浏览器自动化测试仪器_【松勤