最近都沒啥時間,很久沒更新了。
今天分享一下,如何用selenium識別驗證碼,實現(xiàn)自動登錄以及獲取數(shù)據(jù)。
目標(biāo):某東
話不多說直接開始
準(zhǔn)備工作
環(huán)境
- Python 3.10
- Pycharm
模塊使用
- import random
- import time
- from selenium import webdriver
- import pyautogui
- import base64
- import ddddocr
- import csv
win + R 輸入cmd 輸入安裝命令 pip install 模塊名 (如果你覺得安裝速度比較慢, 你可以切換國內(nèi)鏡像源)
selenium: 自動化測試模塊,模擬人的行為去操作瀏覽器 (獲取網(wǎng)頁相關(guān)數(shù)據(jù)內(nèi)容)
正常瀏覽網(wǎng)站流程
- 打開瀏覽器 訪問網(wǎng)站
- 輸入商品名稱, 回車/點擊搜索
- 輸入賬號密碼
- 瀏覽器商品數(shù)據(jù)信息 (第一頁)
- 繼續(xù)瀏覽下一頁
瀏覽器
- webdriver.Chrome() # 谷歌
- webdriver.Edge() # Edge
- webdriver.Firefox() # 火狐
建議大家用谷歌
打開瀏覽器可能會出現(xiàn)問題
- 報錯大概率原因是因為瀏覽器驅(qū)動問題
- 驅(qū)動路徑
I. 當(dāng)你驅(qū)動文件和你代碼放在一起 / 你驅(qū)動文件在python目錄下面 (可以不用寫路徑)
II. 給驅(qū)動文件路徑
- 驅(qū)動版本
瀏覽器可能自動更新 --> 驅(qū)動文件版本也要更新
大版本一樣, 小版本最相近的即可 - 打開瀏覽器之后閃退
原因: 你的selenium版本是4.0的 需要加阻塞
運行完成程序之后, 自動結(jié)束程序…
代碼展示
獲取數(shù)據(jù)部分
selenium自動操作瀏覽器
# 打開瀏覽器 driver = webdriver.Chrome() # 谷歌 # 最大化瀏覽器窗口 driver.maximize_window() # 訪問網(wǎng)站 driver.get('https://www.jd.com/')
?
輸入商品名稱, 回車/點擊搜索按鈕
通過元素定位, 找到搜索框/輸入框, 然后輸入內(nèi)容
driver.find_element_by_id() 按 ID 查找元素 driver.find_element_by_class_name() 按類名查找元素 driver.find_element_by_css_selector() 通過 CSS 選擇器查找元素 driver.find_element_by_xpath() 通過 XPath 查找元素 driver.find_element_by_id('key').send_keys('口紅') # 輸入關(guān)鍵字 driver.find_element_by_class_name('button').click() # 點擊搜索按鈕 # 設(shè)置等待元素加載 driver.implicitly_wait(10) # 文章不理解的話,我還專門錄制了視頻講解 # 和源碼一起打包好了,都放在這個摳裙了:708525271
?
輸入賬號密碼, 登陸
driver.find_element_by_id('loginname').send_keys(account) # 輸入賬號 driver.find_element_by_id('nloginpwd').send_keys(password) # 輸入密碼 driver.find_element_by_id('loginsubmit').click() # 點擊登陸
?
獲取商品的數(shù)據(jù)信息
找到商品數(shù)據(jù)對應(yīng)標(biāo)簽位置
- find_element 定位獲取一個
- find_elements 定位獲取多個
執(zhí)行頁面滾動的操作
def drop_down(): """執(zhí)行頁面滾動的操作""" # javascript for x in range(1, 12, 2):# 1 3 5 7 9 在你不斷的下拉過程中, 頁面高度也會變的 time.sleep(1) j = x / 9 # 1/9 3/9 5/9 9/9 # document.documentElement.scrollTop 指定滾動條的位置 # document.documentElement.scrollHeight 獲取瀏覽器頁面的最大高度 js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j driver.execute_script(js) #設(shè)置等待元素加載過程 driver.implicitly_wait(10) #下滑網(wǎng)頁頁面操作 通過selenium執(zhí)行JS代碼 drop_down() # 返回列表 lis = driver.find_elements_by_class_name('gl-item') # for循環(huán)遍歷, 提取列表里面元素 for li in lis: title = li.find_element_by_css_selector('.p-name em').text price = li.find_element_by_css_selector('.p-price strong i').text commit = li.find_element_by_css_selector('.p-commit strong a').text shop = li.find_element_by_css_selector('.p-shop span a').text dit = { '標(biāo)題': title, '價格': price, '評價': commit, '店鋪': shop, } print(dit)
?
驗證碼識別
模塊
from selenium import webdriver import base64 import time import ddddocr import pyautogui import random from password import account, password
?
模擬登錄
driver = webdriver.Edge(r'D:\自游\京東商品\msedgedriver.exe') driver.get('https://passport.jd.com/new/login.aspx') driver.maximize_window() driver.find_element_by_id('loginname').send_keys(account) # 輸入賬號 driver.find_element_by_id('nloginpwd').send_keys(password) # 輸入密碼 driver.find_element_by_id('loginsubmit').click() # 點擊登陸 time.sleep(1)
?
獲取驗證碼圖片
# 滑塊 img_base6_1 = driver.find_element_by_css_selector('.JDJRV-smallimg img').get_attribute('src').split(',')[-1] # 缺口 img_base6_2 = driver.find_element_by_css_selector('.JDJRV-bigimg img').get_attribute('src').split(',')[-1] img_content_1 = base64.b64decode(img_base6_1) with open('yzm_1.png', mode='wb') as f: f.write(img_content_1) img_content_2 = base64.b64decode(img_base6_2) with open('yzm_2.png', mode='wb') as f: f.write(img_content_2)
?
識別驗證碼 滑塊到缺口距離
det = ddddocr.DdddOcr(det=False, ocr=False) res = det.slide_match(img_content_1, img_content_2, simple_target=True) target = res['target'][0] * 0.67
?
滑動滑塊識別驗證
pyautogui.click(x=1502, y=482, button='left') # 按住鼠標(biāo) pyautogui.dragTo(x=1502+target, y=482, duration=1.5) print(res) # 代碼自取扣裙 708525271
?
文章不理解的話,我還專門錄制了視頻講解,和源碼一起打包好了,上方自取
?
文章來源:http://www.zghlxwxcb.cn/news/detail-760546.html
今天的分享就到這里,溜了溜了~文章來源地址http://www.zghlxwxcb.cn/news/detail-760546.html
到了這里,關(guān)于一個完整Python實戰(zhàn)項目:selenium識別驗證碼實現(xiàn)自動登錄,自動操作瀏覽器獲取某東數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!