最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?+?Selenium?實現(xiàn)模擬登錄jd實例分享

 更新時間:2023年06月02日 08:19:41   作者:Qiu_0000  
這篇文章主要介紹了Python?+?Selenium?實現(xiàn)模擬登錄jd實例分享的相關(guān)資料,需要的朋友可以參考下

1. 前言

最近有點時間,就隨便找點東西弄弄,倒也碰到了一些問題,在此記錄下

2. 環(huán)境

Python3.11.3 + selenium4.9.1 + opencv4.7 + PyAutoGUI0.9.54 + windows11

3. 開始

3.1 賬號密碼輸入

進入登錄頁面,登錄方式有兩種,這里直接定位點擊賬號登錄即可

# 進入登入頁面
self.driver.get(self.config.login_url)
WebDriverWait(self.driver, 10).until(EC.url_to_be(self.config.login_url))
self.driver.maximize_window()
        
# 點擊賬號登錄
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@class="login-tab login-tab-r"]/a')))
self.driver.find_element(By.XPATH, '//*[@class="login-tab login-tab-r"]/a').click()

# 賬號密碼輸入
self.driver.find_element(By.ID, "loginname").send_keys(self.user_info.username)
self.driver.find_element(By.ID, "nloginpwd").send_keys(self.user_info.password)

3.2 通過驗證碼

3.2.1 驗證碼圖片下載

看到驗證碼的圖片是base64格式的,可以通過src屬性來獲取,然后直接轉(zhuǎn)成cv圖片格式即可

bigimg_b64 = self.driver.find_element(By.XPATH, '//*[@class="JDJRV-bigimg"]/img').get_attribute('src')
bigimg_data = base64.b64decode(bigimg_b64.replace('data:image/png;base64,', ''))
bigimg_array = np.frombuffer(bigimg_data, np.uint8)
bigimg_img = cv2.imdecode(bigimg_array, cv2.COLOR_RGB2BGR)

smallimg_b64 = self.driver.find_element(By.XPATH, '//*[@class="JDJRV-smallimg"]/img').get_attribute('src')
smallimg_data = base64.b64decode(smallimg_b64.replace('data:image/png;base64,', ''))
smallimg_array = np.frombuffer(smallimg_data, np.uint8)
smallimg_img = cv2.imdecode(smallimg_array, cv2.COLOR_RGB2BGR)

3.2.2 滑塊需要移動的距離計算




這里可以用opencv來做,正確率還不錯,而且還簡單,直接把兩張驗證碼圖片經(jīng)過灰度后,進行模板匹配即可,不過最后的結(jié)果還需要根據(jù)網(wǎng)頁元素的尺寸進行調(diào)整

# 灰度化
bigimg_gray = cv2.cvtColor(bigimg_img, cv2.COLOR_BGR2GRAY)
smallimg_gray = cv2.cvtColor(smallimg_img, cv2.COLOR_BGR2GRAY)

# 模板匹配
result = cv2.matchTemplate(bigimg_gray, smallimg_gray, cv2.TM_CCOEFF_NORMED)
minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(result)

# 移動距離對應(yīng)到網(wǎng)頁需要縮放(網(wǎng)頁顯示的圖片和實際圖片存在一定的比例差異)
x = minLoc[0] * (278.4 / 360.0)

3.2.3 定位滑動按鈕

之前一直使用selenium的ActionChains來操作滑塊按鈕,但是一直通不過,應(yīng)該是jd有針對selenium有檢測,后面參考了網(wǎng)上可以使用PyAutoGUI來控制鼠標來滑動,那就需要先定位到滑塊的坐標,但是通過selenium獲取的坐標還需要調(diào)整一下PyAutoGUI才能正確的定位到

WebDriverWait(self.driver, 10, 0.5).until(EC.presence_of_element_located((By.XPATH, '//*[@class="JDJRV-slide-inner JDJRV-slide-btn"]')))
slide_btn = self.driver.find_element(By.XPATH, '//*[@class="JDJRV-slide-inner JDJRV-slide-btn"]')
# TODO 網(wǎng)頁元素位置映射到pyautogui會有一定縮放
offset_x = slide_btn.location.get('x') * 1.30
offset_y = slide_btn.location.get('y') * 1.75

3.2.4 模擬滑動

滑的時候發(fā)現(xiàn)上面opencv計算的移動距離還是有些偏差,還需要做些調(diào)整,而且滑動也得盡量擬人化,不然滑對了也通不過

# 直接滑到目標位置--會很難通過驗證(用來調(diào)試移動距離是否正確)
# pyautogui.moveTo(offset_x,offset_y,duration=0.1 + random.uniform(0,0.1 + random.randint(1,100) / 100))
# pyautogui.mouseDown()
# pyautogui.moveTo(offset_x + x * 1.25, offset_y, duration=0.28)
# pyautogui.mouseUp()

# TODO 根據(jù)驗證碼原圖計算的移動距離也需要調(diào)一下縮放
x = x * 1.25

# 鼠標移動到滑塊
pyautogui.moveTo(offset_x,offset_y,duration=0.1 + random.uniform(0,0.1 + random.randint(1,100) / 100))
# 按下鼠標
pyautogui.mouseDown()
offset_y += random.randint(9,19)
# 開始滑動
pyautogui.moveTo(offset_x + int(x * random.randint(15,25) / 20),offset_y,duration=0.28)
offset_y += random.randint(-9,0)
pyautogui.moveTo(offset_x + int(x * random.randint(17,23) / 20),offset_y,
                         duration=random.randint(20,31) / 100)
offset_y += random.randint(0,8)
pyautogui.moveTo(offset_x + int(x * random.randint(19,21) / 20),offset_y,
                         duration=random.randint(20,40) / 100)
offset_y += random.randint(-3,3)
pyautogui.moveTo(x + offset_x + random.randint(-3,3),offset_y,duration=0.5 + random.randint(-10,10) / 100)
offset_y += random.randint(-2,2)
pyautogui.moveTo(x + offset_x + random.randint(-2,2),offset_y,duration=0.5 + random.randint(-3,3) / 100)
# 松開鼠標
pyautogui.mouseUp()

3.2.5 后續(xù)處理

到此基本上模擬登陸就完成了,避免失敗,可以加個循環(huán),滑塊未通過時繼續(xù)下一張,再做一些是否登錄成功的驗證就歐克啦。

4. 完整代碼

https://github.com/QiuMiMi/Get-jd

到此這篇關(guān)于Python + Selenium 實現(xiàn)模擬登錄jd實例分享的文章就介紹到這了,更多相關(guān)Python + Selenium 模擬登錄jd內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python集合的增刪改查操作

    Python集合的增刪改查操作

    這篇文章主要介紹了Python集合的增刪改查操作,其增刪改查操作要看集合的類型來決定,不可變的數(shù)據(jù)當然不能增刪改,只能查詢,可變集合則限制稍微少點。下面和小編一起進放入文章了解更多相關(guān)內(nèi)容吧
    2022-03-03
  • Python腳本實現(xiàn)集群檢測和管理功能

    Python腳本實現(xiàn)集群檢測和管理功能

    這篇文章主要介紹了Python腳本實現(xiàn)集群檢測和管理功能,本文講解了實現(xiàn)想法、開發(fā)工具選擇、經(jīng)驗分享、代碼示例等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • django template 模板渲染的實現(xiàn)

    django template 模板渲染的實現(xiàn)

    Django 的模板系統(tǒng)旨在使設(shè)計人員能夠編寫 HTML,同時以一種安全和靈活的方式動態(tài)顯示數(shù)據(jù),本文主要介紹了django template模板渲染的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2025-01-01
  • Python黑魔法庫安裝及操作字典示例詳解

    Python黑魔法庫安裝及操作字典示例詳解

    這篇文章主要為大家介紹了Python中黑魔法庫的安裝及操作字典的示例詳解,有需要的 朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-10-10
  • 使用Python對mongo數(shù)據(jù)庫中字符串型正負數(shù)值比較大小

    使用Python對mongo數(shù)據(jù)庫中字符串型正負數(shù)值比較大小

    這篇文章主要介紹了使用Python對mongo數(shù)據(jù)庫中字符串型正負數(shù)值比較大小,
    2023-04-04
  • Python輕松玩轉(zhuǎn)列表之求最大值/最小值/平均值與總和的實用指南

    Python輕松玩轉(zhuǎn)列表之求最大值/最小值/平均值與總和的實用指南

    在Python編程中,列表(List)是最基礎(chǔ)且常用的數(shù)據(jù)結(jié)構(gòu)之一,處理列表時,經(jīng)常需要計算其中的最大值,最小值,平均值和總和,下面小編就和大家詳細介紹一下具體的實現(xiàn)方法吧
    2025-12-12
  • PyQt5 QFrame控件的用法詳解

    PyQt5 QFrame控件的用法詳解

    在PyQt5中,QFrame是一個重要的基類,它提供了邊框樣式、陰影效果、形狀等屬性,可以幫助開發(fā)者實現(xiàn)豐富多彩的界面效果,本文將結(jié)合實際案例,詳細介紹QFrame在PyQt5中的用法,需要的朋友可以參考下
    2024-08-08
  • 利用Python自帶PIL庫擴展圖片大小給圖片加文字描述的方法示例

    利用Python自帶PIL庫擴展圖片大小給圖片加文字描述的方法示例

    最近的一個工程項目是講文字添加到圖像上,所以下面這篇文章主要給大家介紹了關(guān)于利用Python自帶PIL庫擴展圖片大小給圖片加文字描述的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-08-08
  • 帶你認識Django

    帶你認識Django

    今天小編就為大家分享一篇關(guān)于帶你認識Django,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • pyinstaller參數(shù)介紹以及總結(jié)詳解

    pyinstaller參數(shù)介紹以及總結(jié)詳解

    這篇文章主要介紹了pyinstaller參數(shù)介紹以及總結(jié)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07

最新評論

长白| 秭归县| 宝山区| 新乡县| 四会市| 灵寿县| 河曲县| 嘉祥县| 侯马市| 紫金县| 宜章县| 二连浩特市| 和林格尔县| 会东县| 长泰县| 汝州市| 纳雍县| 宕昌县| 浠水县| 大城县| 西林县| 大渡口区| 司法| 合山市| 定远县| 秦皇岛市| 孝昌县| 廉江市| 邓州市| 定日县| 准格尔旗| 红安县| 台前县| 乌拉特前旗| 麻江县| 太仆寺旗| 黑水县| 霸州市| 麟游县| 讷河市| 阳高县|