python自動(dòng)填寫(xiě)問(wèn)卷星問(wèn)卷以及提交問(wèn)卷等功能
前言:
問(wèn)卷是很好的網(wǎng)絡(luò)調(diào)查方式之一,近年來(lái),問(wèn)卷星被廣泛應(yīng)用于各方面的調(diào)查。本文介紹了利用python代碼自動(dòng)填寫(xiě)問(wèn)卷星基本題目,擁有自動(dòng)填寫(xiě)、解決智能驗(yàn)證、批量提交問(wèn)卷等功能。
1.下載瀏覽器驅(qū)動(dòng)
python自動(dòng)化填寫(xiě)問(wèn)卷需要依賴瀏覽器驅(qū)動(dòng),這里使用的是谷歌瀏覽器,所以需要下載chromedriver,且下載的版本要和瀏覽器版本一致。
首先打開(kāi)谷歌瀏覽器,點(diǎn)擊“幫助”——“關(guān)于Google Chrome”,查看瀏覽器版本。如圖:


查看完版本后打開(kāi)鏈接:CNPM Binaries Mirror下載對(duì)應(yīng)系統(tǒng)對(duì)應(yīng)版本的谷歌瀏覽器驅(qū)動(dòng)。如圖:

下載完成后會(huì)得到chromedriver.exe文件,此時(shí)將其復(fù)制到python工程目錄文件夾中的venv文件夾中的Scripts文件夾下,如圖:

2. selenium基本配置
selenium本質(zhì)是通過(guò)驅(qū)動(dòng)瀏覽器,完全模擬瀏覽器的操作,就像真正的用戶在操作一樣。這個(gè)工具的主要功能包括:測(cè)試與瀏覽器的兼容性——測(cè)試你的應(yīng)用程序看是否能夠很好得工作在不同瀏覽器和操作系統(tǒng)之上。測(cè)試系統(tǒng)功能——創(chuàng)建回歸測(cè)試檢驗(yàn)軟件功能和用戶需求。selenium庫(kù)可以通過(guò)終端命令pip install selenium安裝。
導(dǎo)入相關(guān)的包
import random # 用于產(chǎn)生隨機(jī)數(shù) import time # 用于延時(shí) from selenium.webdriver.common.by import By #導(dǎo)入By包進(jìn)行元素定位 from selenium import webdriver from selenium.webdriver.chrome.options import Options
實(shí)例化一個(gè)啟動(dòng)參數(shù)對(duì)象
#實(shí)例化一個(gè)啟動(dòng)參數(shù)對(duì)象
chrome_options = Options()
#添加啟動(dòng)參數(shù)
chrome_options.add_argument(
'user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"') # 添加請(qǐng)求頭
chrome_options.add_argument('--disable-blink-features=AutomationControlled')
# 防止被識(shí)別
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation']) #設(shè)置開(kāi)發(fā)者模式啟動(dòng)
其他設(shè)置
chrome_options.add_experimental_option('useAutomationExtension', False) # 關(guān)閉selenium對(duì)chrome driver的自動(dòng)控制
chrome_options.maximize_window() # 網(wǎng)頁(yè)最大化
#chrome_options.add_argument('headless') #設(shè)置瀏覽器以無(wú)界面方式運(yùn)行設(shè)置驅(qū)動(dòng)程序
browser = webdriver.Chrome(options=chrome_options) #設(shè)置驅(qū)動(dòng)程序,啟動(dòng)瀏覽器 (實(shí)現(xiàn)以特定參數(shù)啟動(dòng))
browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',
{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'}) #用來(lái)執(zhí)行Chrome開(kāi)發(fā)這個(gè)工具命令3.答題代碼
定義一個(gè)run方法,并往方法里面添加內(nèi)容。
獲取問(wèn)卷內(nèi)容
browser.get('https://www.***.**/**/*****.aspx') # 獲取問(wèn)卷信息(此處填問(wèn)卷鏈接)單選題
# 問(wèn)題1的點(diǎn)擊 (性別)
randomId = random.randint(1, 2) # 隨機(jī)點(diǎn)擊第一個(gè)選項(xiàng)或第二個(gè)選項(xiàng)
#js實(shí)現(xiàn)方式
js = "document.getElementById(\"q1_" + str(randomId) + "\").checked = true"
browser.execute_script(js) #使用js實(shí)現(xiàn)點(diǎn)擊的效果(調(diào)用js方法,同時(shí)執(zhí)行javascript腳本)
js = "document.getElementById(\"q1_" + str(randomId) + "\").click()"
browser.execute_script(js) #使用js實(shí)現(xiàn)點(diǎn)擊的效果(調(diào)用js方法,同時(shí)執(zhí)行javascript腳本)
# 延時(shí) 太快會(huì)被檢測(cè)是腳本
time.sleep(1)
# 問(wèn)題2 (年齡)
randomId = random.randint(2, 4) # 隨機(jī)數(shù),5個(gè)多選框 隨機(jī)點(diǎn)擊
# js實(shí)現(xiàn)方式
js = "document.getElementById(\"q2_" + str(randomId) + "\").checked = true"
browser.execute_script(js)
js = "document.getElementById(\"q2_" + str(randomId) + "\").click()" # 拼接字符串的方式 js找到對(duì)應(yīng)id 點(diǎn)擊按鈕
browser.execute_script(js)
# 延時(shí)
time.sleep(0.1)多選題
# 問(wèn)題5
randomId = random.randint(1, 3) # 隨機(jī)數(shù)選擇(選多少個(gè))
for i in range(1, randomId + 1): # 循環(huán) 實(shí)現(xiàn)多選效果
randomId1 = random.randint(1, 6) #隨機(jī)選擇第1到第6個(gè)選項(xiàng)之一
# 兩種js實(shí)現(xiàn)方式
js = "document.getElementById(\"q5_" + str(randomId1) + "\").checked = true"
browser.execute_script(js)
js = "document.getElementById(\"q5_" + str(randomId1) + "\").click()"
browser.execute_script(js)
# 延時(shí)
time.sleep(1)填空題
# 問(wèn)題25
#自定義要填的內(nèi)容
block = ["定義第1個(gè)填空","定義第2個(gè)填空","定義第3個(gè)填空","定義第4個(gè)填空","定義第5個(gè)填空","定義第6個(gè)填空","無(wú)"]
#在上述內(nèi)容中隨機(jī)選擇一個(gè)填入
randomId = random.randint(0, 5) #(數(shù)值下標(biāo)從0開(kāi)始)
#在題目中隨機(jī)輸入上述內(nèi)容
browser.find_element_by_id("q25").send_keys(block[randomId])
# 延時(shí)
time.sleep(0.1)4.提交+智能驗(yàn)證
首先查看問(wèn)卷源代碼,并復(fù)制“提交”按鈕的xpath,如圖:


#點(diǎn)擊提交
submit = browser.find_element_by_xpath("http://*[@id='ctlNext']") #網(wǎng)頁(yè)源代碼的xpath
submit.click() #點(diǎn)擊
#延時(shí) 太快會(huì)被檢測(cè)是腳本
time.sleep(0.5) # 模擬點(diǎn)擊智能驗(yàn)證按鈕
# 先點(diǎn)確認(rèn)
browser.find_element(By.XPATH,"http://button[text()='確認(rèn)']").click()
time.sleep(1)
# 再點(diǎn)智能驗(yàn)證提示框,進(jìn)行智能驗(yàn)證
browser.find_element_by_xpath("http://div[@id='captcha']").click()5.主函數(shù)
if __name__ == "__main__":
#批量提交問(wèn)卷
for i in range(10): #運(yùn)行一次提交10份問(wèn)卷
run()
time.sleep(5) # 避免提交過(guò)快 會(huì)出現(xiàn)驗(yàn)證以上代碼親測(cè)有效,當(dāng)短時(shí)間內(nèi)刷的問(wèn)卷數(shù)過(guò)多時(shí),可能會(huì)出現(xiàn)第二重智能驗(yàn)證,這就要手動(dòng)驗(yàn)證了哦,所以為了防止出現(xiàn)二重智能驗(yàn)證,在每提交完一份問(wèn)卷后,要用time.sleep函數(shù)用于延時(shí) , 避免提交過(guò)快。
總結(jié)
到此這篇關(guān)于python自動(dòng)填寫(xiě)問(wèn)卷星問(wèn)卷以及提交問(wèn)卷等功能的文章就介紹到這了,更多相關(guān)python自動(dòng)填寫(xiě)問(wèn)卷星問(wèn)卷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Django實(shí)現(xiàn)把兩個(gè)模型類的數(shù)據(jù)聚合在一起
這篇文章主要介紹了使用Django實(shí)現(xiàn)把兩個(gè)模型類的數(shù)據(jù)聚合在一起,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
談?wù)剬?duì)Pytorch中的forward的理解
這篇文章主要介紹了談?wù)剬?duì)Pytorch中的forward的理解,在Pytorch中,forward方法是一個(gè)特殊的方法,被專門(mén)用來(lái)進(jìn)行前向傳播,本文給大家詳細(xì)講解,需要的朋友可以參考下2023-04-04
python腳本爬取字體文件的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了利用python腳本爬取字體文件的實(shí)現(xiàn)方法,文中分享了爬取兩個(gè)不同網(wǎng)站的示例代碼,相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-04-04
Python中利用sqrt()方法進(jìn)行平方根計(jì)算的教程
這篇文章主要介紹了Python中利用sqrt()方法進(jìn)行平方根計(jì)算的教程,是Python學(xué)習(xí)的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05
詳解Python?NumPy如何使用argsort方法進(jìn)行排序
NumPy提供了各種功能強(qiáng)大的數(shù)組操作方法,其中之一就是argsort方法,本文將詳細(xì)介紹argsort方法的使用,以及如何在實(shí)際項(xiàng)目中充分利用它進(jìn)行排序操作,希望對(duì)大家有所幫助2024-03-03
詳解Python并發(fā)編程之從性能角度來(lái)初探并發(fā)編程
這篇文章主要介紹了詳解Python并發(fā)編程之從性能角度來(lái)初探并發(fā)編程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Python調(diào)用騰訊API進(jìn)行人像動(dòng)漫化效果實(shí)例
最近上網(wǎng)的時(shí)候看到了一個(gè)有趣的東西,叫做人物動(dòng)漫化,嘗試著用python實(shí)現(xiàn)了,所以下面這篇文章主要給大家介紹了關(guān)于Python調(diào)用騰訊API進(jìn)行人像動(dòng)漫化效果的相關(guān)資料,需要的朋友可以參考下2023-06-06

