Python+Selenium實(shí)現(xiàn)自動(dòng)填寫問卷
??效果預(yù)覽

??環(huán)境準(zhǔn)備
selenium、payautogui安裝
- Selenium:用于自動(dòng)化web應(yīng)用程序測試。它提供了一組API和庫,使開發(fā)人員能夠以編程方式控制瀏覽器并執(zhí)行各種操作,如模擬用戶的點(diǎn)擊、輸入文本、獲取元素屬性、處理JavaScript彈窗等。Selenium最初是為瀏覽器自動(dòng)化測試而設(shè)計(jì)的,但在實(shí)際應(yīng)用中,它也可以用于數(shù)據(jù)挖掘、網(wǎng)頁抓取和自動(dòng)化任務(wù)等其他方面。
- PyAutoGUI:用于自動(dòng)化鼠標(biāo)和鍵盤操作的Python庫。它提供了一組功能豐富的API,可以模擬用戶在屏幕上的鼠標(biāo)移動(dòng)、點(diǎn)擊、滾動(dòng)以及鍵盤按鍵的操作。PyAutoGUI可以幫助開發(fā)人員實(shí)現(xiàn)各種自動(dòng)化任務(wù),如自動(dòng)化測試、屏幕錄制、圖像識(shí)別等。
pip install selenium pip install pyautogui
WebDriver谷歌瀏覽器驅(qū)動(dòng)安裝
驅(qū)動(dòng)下載地址:webdriver
注意找到本地瀏覽器對(duì)應(yīng)的版本

??具體代碼
以下代碼是單元題、矩陣多選題的代碼,包含具體的代碼注釋。如果想修改成適用于個(gè)人問卷的代碼,可參照定位元素方法的章節(jié)。
# 引入相關(guān)模塊
from selenium.webdriver.common.by import By
from selenium import webdriver
#隨機(jī)數(shù)產(chǎn)生
import random
#延時(shí)
import time
# 模擬人手,進(jìn)行頁面滾動(dòng)
import pyautogui
####方法:題干————》選項(xiàng)####
#滾動(dòng)方法,scroPx為滾動(dòng)距離
def scrop(driver,scroPx):
#滾動(dòng)腳本
js = "var q=document.documentElement.scrollTop=" + str(scroPx)
#腳本執(zhí)行
driver.execute_script(js)
#延時(shí)
time.sleep(1)
#單選題
def single(driver):
#頁面中有10個(gè)單選題
for j in range(1,11):
#每個(gè)單選題所在的位置
sinPro = driver.find_elements_by_css_selector(f'#div{j} > div.ui-controlgroup.column1')
#每個(gè)單選題的答案進(jìn)行遍歷
for answer in sinPro:
#對(duì)應(yīng)每個(gè)單選題的選項(xiàng)組合
ansItem= answer.find_elements_by_css_selector('.ui-radio')
#隨機(jī)點(diǎn)擊選項(xiàng)
random.choice(ansItem).click()
#答題時(shí)間間隔
time.sleep(random.randint(0,1))
#矩陣選擇題,一個(gè)題
def juzhen(driver):
#矩陣行數(shù)
for i in range(1,6):
#矩陣列數(shù),
index = random.randint(2, 6)
#對(duì)應(yīng)的每一個(gè)選項(xiàng)
dan = driver.find_element_by_xpath(f"http://tr[@id='drv8_{i}']/td[{index}]/a")
#選擇
dan.click()
time.sleep(random.randint(0, 1))
#腳本執(zhí)行方法
def launch(nums):
for i in range(0, nums):
# 初始配置,問卷星地址
url_survey = 'https://www.wjx.cn/vm/wY1vxPu.aspx'
option = webdriver.ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option('useAutomationExtension', False)
# 本地下載的谷歌瀏覽器地址
option.binary_location = r'C:\Program Files\Google\Chrome\Application\chrome.exe'
# 下載好的Chrome驅(qū)動(dòng)的地址
driver = webdriver.Chrome(r"D:\chromedriver_win32\chromedriver.exe", options=option)
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',
{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})
# 啟動(dòng)要填寫的地址
driver.get(url_survey)
#調(diào)用單選題方法
single(driver)
time.sleep(random.randint(0, 1))
#涉及到多個(gè)矩陣題執(zhí)行方法
for k in range(4):
method_name = f'juzhen{k}'
method = globals()[method_name]
method(driver)
#調(diào)用滾動(dòng)屏幕方法
scrop(driver, 600)
#提交按鈕
driver.find_element_by_css_selector('#ctlNext').click() # 找到提交的css并點(diǎn)擊
time.sleep(4)
print('已經(jīng)提交了{(lán)}次問卷'.format(int(i) + int(1)))
time.sleep(4)
driver.quit()#停止
if __name__ == "__main__":
#填寫問卷次數(shù)
launch(5)??Selenium常用API
| 方法 | 描述 |
|---|---|
| find_element_by_id('element_id') | 通過元素的id屬性查找元素 |
| find_element_by_name('element_name') | 通過元素的name屬性查找元素 |
| find_element_by_class_name('class') | 通過元素的class屬性查找元素 |
| find_element_by_tag_name('tag') | 通過元素的標(biāo)簽名查找元素 |
| find_element_by_link_text('text') | 通過鏈接文本查找超鏈接元素 |
| find_element_by_partial_link_text('text') | 通過部分鏈接文本查找超鏈接元素 |
| find_element_by_xpath('xpath_expression') | 通過XPath表達(dá)式查找元素 |
| find_element_by_css_selector('css_selector') | 通過CSS選擇器查找元素 |
| click() | 點(diǎn)擊元素 |
| send_keys('text') | 向元素發(fā)送文本內(nèi)容 |
| clear() | 清空元素的內(nèi)容 |
| get('url') | 打開指定的URL |
| current_url | 獲取當(dāng)前頁面的URL |
| title | 獲取當(dāng)前頁面的標(biāo)題 |
| back() | 返回上一個(gè)瀏覽的頁面 |
| forward() | 前進(jìn)到下一個(gè)瀏覽的頁面 |
| refresh() | 刷新當(dāng)前頁面 |
| switch_to.frame('frame') | 切換到指定的iframe |
| switch_to.default_content() | 切換到默認(rèn)的frame |
| switch_to.alert | 處理 JavaScript 彈窗 |
| execute_script('script') | 在當(dāng)前頁面執(zhí)行 JavaScript 代碼 |
??如何定位元素
打開開發(fā)者工具,找到選項(xiàng)位置的具體代碼,之后右擊鼠標(biāo)進(jìn)行元素定位,點(diǎn)擊copy復(fù)制到自己代碼中即可。

??寫在最后
到此這篇關(guān)于Python+Selenium實(shí)現(xiàn)自動(dòng)填寫問卷的文章就介紹到這了,更多相關(guān)Python Selenium自動(dòng)填寫問卷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
selenium+python自動(dòng)化測試之使用webdriver操作瀏覽器的方法
這篇文章主要介紹了selenium+python自動(dòng)化測試之使用webdriver操作瀏覽器的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01
通過淘寶數(shù)據(jù)爬蟲學(xué)習(xí)python?scrapy?requests與response對(duì)象
本文主要介紹了通過淘寶數(shù)據(jù)爬蟲學(xué)習(xí)python?scrapy?requests與response對(duì)象,首先從Resquest和Response對(duì)象開始展開詳細(xì)文章,需要的小伙伴可以參考一下2022-05-05
對(duì)django views中 request, response的常用操作詳解
今天小編就為大家分享一篇對(duì)django views中 request, response的常用操作詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07
Python實(shí)現(xiàn)提取圖片中顏色并繪制成可視化圖表
今天小編來為大家分享一個(gè)有趣的可視化技巧,就是如何利用Python語言實(shí)現(xiàn)從圖片中提取顏色然后繪制成可視化圖表,感興趣的可以嘗試一下2022-07-07
Python 字符串大小寫轉(zhuǎn)換的簡單實(shí)例
下面小編就為大家?guī)硪黄狿ython 字符串大小寫轉(zhuǎn)換的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01
Python使用SQLite和Excel操作進(jìn)行數(shù)據(jù)分析
這篇文章主要介紹了Python使用SQLite和Excel操作進(jìn)行數(shù)據(jù)分析,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
淺談Pandas Series 和 Numpy array中的相同點(diǎn)
今天小編就為大家分享一篇淺談Pandas Series 和 Numpy array中的相同點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06

