日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python selenium自动化刷问卷+绕过智能验证

發布時間:2024/3/24 python 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python selenium自动化刷问卷+绕过智能验证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??學校思政實踐要收集1500份問卷,待在家里無聊就簡單寫了個用selenium模塊實現的自動填寫問卷xing問卷的小程序。

??基本思路很簡單
??1.先打開問卷的網址,按F12進開發者模式分析頁面HTML,找到題目的選項按鈕對應的HTML代碼(例如:Q1的四個選項按鈕都在a標簽內,且rel屬性值分別為q1_1,q1_2,q1_3,q1_4);
??2.在py中用slenium的find_element_by_xpath+click()方法實現模擬點擊按鈕,例如:

q1 = random() if 0 <= q1 <= 0.5:# 通過屬性定位元素# q1_1是Q1的第1個按鈕driver.find_element_by_xpath("//a[@rel='q1_1']").click() else:driver.find_element_by_xpath("//a[@rel='q1_2']").click()

??3.若想模擬人的選擇偏好,就用隨機數區間+if語句控制,無非就是多寫幾條語句;
??4.最后填寫完問卷提交也是一樣的,find_element找到提交按鈕的html對應代碼再click()。此時要注意——在py中用selenium模擬填寫的問卷最后點擊提交必定觸發智能驗證框:

??這時你無論用人手點擊或者是再模擬點擊都是沒法驗證成功的

??這是因為問卷xing網頁有反爬機制會檢查你是不是通過selenium訪問網頁的。大多數情況下,檢測基本原理是檢測當前瀏覽器窗口下的window.navigator對象是否包含webdriver這個屬性。因為在正常使用瀏覽器的情況下,這個屬性是undefined,然而一旦我們使用了selenium,selenium會給window.navigator設置webdriver屬性。很多網站就通過JS判斷如果webdrive 屬性存在,那就直接屏蔽。

??網上搜了一下,基本看著都是用pyppeteer解決反爬的方法,安裝python第三方庫asyncio、pyppeteer和pyppeteer_stealth然后一頓操作猛如虎似乎可以繞過智能驗證?這個方法我沒試,大家可以試試看,附上相關博文:使用Python自動填寫問卷星(pyppeteer反爬蟲版)。
??我參考了某位知乎答主的方法——
??通過 CDP 實現在每個頁面剛加載的時候執行JS代碼,執行的CDP方法叫作Page.addScriptToEvaluateOnNewDocument。傳入一段JS代碼:

url = "http://www.baidu.com" #實例url option = 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.get(url)

這樣就可以在每次頁面加載之前將webdriver屬性置空從而躲過智能檢測。

部分代碼如下:

from selenium import webdriver import time from random import *print("正在執行操作......") # 給出所需的url和option參數 url_survey = ("https://www.wjx.cn/xx/xxxxxxx.aspx") # 根據需要填寫url option = webdriver.ChromeOptions() option.add_experimental_option('excludeSwitches', ['enable-automation']) option.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=option) driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'}) driver.get(url_survey) time.sleep(2)# 處理Q1 # 生成隨機數,決定點哪個按鈕 q1 = random() if 0 <= q1 <= 0.5:# 通過屬性定位元素# q1_1是Q1的第1個按鈕driver.find_element_by_xpath("//a[@rel='q1_1']").click() else:driver.find_element_by_xpath("//a[@rel='q1_2']").click()# 處理Q2 # 生成隨機數,決定點哪個按鈕 q2 = random() if 0 <= q2 <= 0.25:driver.find_element_by_xpath("//a[@rel='q2_1']").click() elif 0.25 < q2 <= 0.50:driver.find_element_by_xpath("//a[@rel='q2_2']").click() elif 0.50 < q2 <= 0.75:driver.find_element_by_xpath("//a[@rel='q2_3']").click() else:driver.find_element_by_xpath("//a[@rel='q2_4']").click()# 處理Q3 # 生成隨機數,決定點哪個按鈕 q3 = random() if 0 <= q3 <= 0.25:driver.find_element_by_xpath("//a[@rel='q3_1']").click() elif 0.25 < q3 <= 0.50:driver.find_element_by_xpath("//a[@rel='q3_2']").click() elif 0.50 < q3 <= 0.75:driver.find_element_by_xpath("//a[@rel='q3_3']").click() else:driver.find_element_by_xpath("//a[@rel='q3_4']").click()

完整代碼如下,歡迎小伙伴們fork or star:
Python+Selenium實現自動化刷問卷+繞過智能驗證

上述代碼親測可用。

注意:當短時間內刷的問卷數過多時,可能會出現第二重智能驗證,要拖動滑塊進行驗證,這個我暫時沒有進行實驗。

代碼驗證視頻:

總結

以上是生活随笔為你收集整理的Python selenium自动化刷问卷+绕过智能验证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。