欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1. 前言

最近有點(diǎn)時(shí)間,就隨便找點(diǎn)東西弄弄,倒也碰到了一些問(wèn)題,在此記錄下

2. 環(huán)境

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

3. 開(kāi)始

3.1 賬號(hào)密碼輸入

進(jìn)入登錄頁(yè)面,登錄方式有兩種,這里直接定位點(diǎn)擊賬號(hào)登錄即可

# 進(jìn)入登入頁(yè)面
self.driver.get(self.config.login_url)
WebDriverWait(self.driver, 10).until(EC.url_to_be(self.config.login_url))
self.driver.maximize_window()
        
# 點(diǎn)擊賬號(hào)登錄
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()

# 賬號(hào)密碼輸入
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 通過(guò)驗(yàn)證碼

3.2.1 驗(yàn)證碼圖片下載

看到驗(yàn)證碼的圖片是base64格式的,可以通過(guò)src屬性來(lái)獲取,然后直接轉(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 滑塊需要移動(dòng)的距離計(jì)算




這里可以用opencv來(lái)做,正確率還不錯(cuò),而且還簡(jiǎn)單,直接把兩張驗(yàn)證碼圖片經(jīng)過(guò)灰度后,進(jìn)行模板匹配即可,不過(guò)最后的結(jié)果還需要根據(jù)網(wǎng)頁(yè)元素的尺寸進(jìn)行調(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)

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

3.2.3 定位滑動(dòng)按鈕

之前一直使用selenium的ActionChains來(lái)操作滑塊按鈕,但是一直通不過(guò),應(yīng)該是jd有針對(duì)selenium有檢測(cè),后面參考了網(wǎng)上可以使用PyAutoGUI來(lái)控制鼠標(biāo)來(lái)滑動(dòng),那就需要先定位到滑塊的坐標(biāo),但是通過(guò)selenium獲取的坐標(biāo)還需要調(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)頁(yè)元素位置映射到pyautogui會(huì)有一定縮放
offset_x = slide_btn.location.get('x') * 1.30
offset_y = slide_btn.location.get('y') * 1.75

3.2.4 模擬滑動(dòng)

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

# 直接滑到目標(biāo)位置--會(huì)很難通過(guò)驗(yàn)證(用來(lái)調(diào)試移動(dòng)距離是否正確)
# 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ù)驗(yàn)證碼原圖計(jì)算的移動(dòng)距離也需要調(diào)一下縮放
x = x * 1.25

# 鼠標(biāo)移動(dòng)到滑塊
pyautogui.moveTo(offset_x,offset_y,duration=0.1 + random.uniform(0,0.1 + random.randint(1,100) / 100))
# 按下鼠標(biāo)
pyautogui.mouseDown()
offset_y += random.randint(9,19)
# 開(kāi)始滑動(dòng)
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)
# 松開(kāi)鼠標(biāo)
pyautogui.mouseUp()

3.2.5 后續(xù)處理

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

4. 完整代碼

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

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

相關(guān)文章

  • 解決IDEA 的 plugins 搜不到任何的插件問(wèn)題

    解決IDEA 的 plugins 搜不到任何的插件問(wèn)題

    這篇文章主要介紹了解決IDEA 的 plugins 搜不到任何的插件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • 淺談Python反射 & 單例模式

    淺談Python反射 & 單例模式

    這篇文章主要介紹了Python反射 & 單例模式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • python中路徑的三種寫(xiě)法+路徑前符號(hào)含義解讀

    python中路徑的三種寫(xiě)法+路徑前符號(hào)含義解讀

    這篇文章主要介紹了python中路徑的三種寫(xiě)法+路徑前符號(hào)含義解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Python中方法的缺省參數(shù)問(wèn)題解讀

    Python中方法的缺省參數(shù)問(wèn)題解讀

    這篇文章主要介紹了Python中方法的缺省參數(shù)問(wèn)題解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • python僵尸進(jìn)程產(chǎn)生的原因

    python僵尸進(jìn)程產(chǎn)生的原因

    這篇文章主要給大家講解的是在Python中是如何產(chǎn)生僵尸進(jìn)程的,以及如何清除僵尸進(jìn)程的方法,有需要的小伙伴可以參考下
    2017-07-07
  • python?@property?裝飾器使用方法

    python?@property?裝飾器使用方法

    這篇文章主要介紹了python?@property?裝飾器使用詳細(xì),使用property可以講類的方法變成同名屬性,使用起來(lái)更加簡(jiǎn)潔,下文最后舉例說(shuō)明詳情說(shuō)明需要的小伙伴可以參考一下
    2022-03-03
  • pandas常用表連接merge/concat/join/append詳解

    pandas常用表連接merge/concat/join/append詳解

    使用python的pandas庫(kù)可以很容易幫你搞定,而且性能也是很出色的;百萬(wàn)級(jí)的表關(guān)聯(lián),可以秒出,本文給大家分享pandas常用表連接merge/concat/join/append詳解,感興趣的朋友跟隨小編一起看看吧
    2023-02-02
  • 詳解Python循環(huán)作用域與閉包

    詳解Python循環(huán)作用域與閉包

    這篇文章主要介紹了Python循環(huán)作用域與閉包,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Python利用fitz庫(kù)提取pdf中的圖片

    Python利用fitz庫(kù)提取pdf中的圖片

    Fitz庫(kù)是一個(gè)Python圖像處理庫(kù),主要用于打開(kāi)、編輯和保存PDF、TIFF和JPEG格式的圖像,它可以幫助用戶讀取和寫(xiě)入PDF文件,提取PDF頁(yè)面以及在頁(yè)面上進(jìn)行標(biāo)記和注釋,本文主要介紹了如何通過(guò)Python的fitz庫(kù)提取pdf中的圖片,需要的朋友可以參考下
    2023-05-05
  • Python 圖像對(duì)比度增強(qiáng)的幾種方法(小結(jié))

    Python 圖像對(duì)比度增強(qiáng)的幾種方法(小結(jié))

    這篇文章主要介紹了Python 圖像對(duì)比度增強(qiáng)的幾種方法(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論