selenium模擬登入12306
利用selenium模擬登入12306,但是12306的登陸要想模擬還挺難的,需要先進行座標識別,識別出來之後還要在進行滑塊拖動驗證識別,這裡做一下記錄.
這裡的座標識別是用的超級鷹,有時也會座標識別出錯,最後的一步滑動驗證碼識別現在做不了,不論是模擬滑動還是手動滑動都有問題。原始碼如下(其中超級鷹的識別程式碼就不貼了)
from selenium import webdriver
from time import sleep
from PIL import Image
from selenium.webdriver import ChromeOptions # 檢測規避
from spider_basic.expand.chaojiying import verify_text
# 檢測規避
options = ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
brow = webdriver.Chrome(executable_path='./chromedriver.exe', options=options)
# 瀏覽器最大化操作,這裡需要執行這個操作才能精確定位
brow.maximize_window()
brow.get('https://kyfw.12306.cn/otn/resources/login.html')
login_account_bnt = brow.find_element_by_xpath('/html/body/div[2]/div[2]/ul/li[2]/a')
# 選擇賬號密碼登入
login_account_bnt.click()
sleep(2) # 這裡需要停頓保證選擇驗證碼已重新整理出來
# 填寫使用者名稱和密碼
user = brow.find_element_by_xpath('//*[@id="J-userName"]')
user.send_keys('user')
pwd = brow.find_element_by_xpath('//*[@id="J-password"]')
pwd.send_keys('pwd')
brow.save_screenshot('./login.png')
# 確定驗證碼圖片區域
verifycode_elem = brow.find_element_by_id('J-loginImg')
location = verifycode_elem.location # 驗證碼圖片左上角的座標
print('location:', location)
size = verifycode_elem.size
print('size:', size)
# 剛開始把location_range寫成了下面這樣,我吐了
# range = (
# int(location['x']) * 1.25, int(location['y']) * 1.25, int((location['x']) + size['width']) * 1.25,
# int((location['x']) + size['width']) * 1.25
# )
location_range = (
int(location['x']) * 1.25, int(location['y']) * 1.25, int((location['x']) + size['width']) * 1.25,
int((location['y']) + size['height']) * 1.25
)
# crop根據指定區域進行圖片裁剪
i = Image.open('./login.png')
verifycode_img_name = 'verify.png'
frame = i.crop(location_range) # 接受一個4元素的元組,分別是左上角座標和右下角座標
frame.save(verifycode_img_name)
verify_data = verify_text(image_path=verifycode_img_name, type=9004)
# verify_text這裡的這個函式就是超級鷹識別然後返回結果的函式
print(verify_data)
pos = []
# if '|' in verify_data: # 超過一個滿足條件圖片
total_list = verify_data.split('|')
for item_list in total_list:
# x = int(item.split(',')[0])
# y = int(item.split(',')[0])
tmp_list = item_list.split(',')
for item in tmp_list:
val = int(item)
pos.append(val)
for i in range(len(pos) // 2):
x = pos[i*2]
y = pos[i*2+1]
webdriver.ActionChains(brow).move_to_element_with_offset(verifycode_elem, x, y).click().perform()
sleep(0.5)
login_btn = brow.find_element_by_id('J-login')
login_btn.click()
# 加入動作鏈
# div_tag = brow.find_element_by_xpath('//*[@id="nc_1_n1z"]')
#
# # 對div_tag進行滑動操作
# action = webdriver.ActionChains(brow)
# action.click_and_hold(div_tag)
#
# for i in range(6):
# # perform 讓動作鏈立即執行
# action.move_by_offset(20,0).perform() #偏移x20畫素,y0畫素
# sleep(0.1)
# action.release()
- 剛開始元組location_range 中右下角的座標寫錯了,造成截圖偏離,被搞了很長時間。後面更正了,截出來了但還是有些歪,後面查資料發現要讓頁面最大化就行了。
- 有時會出錯說登陸按鈕定位有問題,這個不知道是啥原因。
- 最終有一次識別成功,但後面的滑塊驗證過不了,這個是反爬機制的原因,因為即使最後手動拖動也會提示出錯
相關文章
- 使用Selenium模擬登陸百度盤
- Python+Selenium+phantomjs實現網頁模擬登入和截圖PythonJS網頁
- 爬蟲實戰(二):Selenium 模擬登入並爬取資訊爬蟲
- selenium與python自動化測試模擬登入百度Python
- Python-模擬登入Python
- 實戰:Mailivery 模擬登入AI
- 利用Python模擬GitHub登入PythonGithub
- 【Java】——模擬登入實現Java
- 模擬登入之web監控Web
- 實戰模擬│JWT 登入認證JWT
- QQ模擬登入實現後篇
- 使用 mock 模擬登入介面資料Mock
- golang 模擬瀏覽器登入操作Golang瀏覽器
- Python 爬蟲模擬登入方法彙總Python爬蟲
- 爬蟲模擬登入—OAUTH的詳解爬蟲OAuth
- 12306搶票系統無介面版本——(1)登入(12306驗證碼問題破解)
- 為爬蟲獲取登入cookies: 使用Charles和requests模擬微博登入爬蟲Cookie
- 父子元件通訊——模擬12306購票新增乘車人元件
- Python利用Selenium自動登入掘金Python
- 實戰模擬│單點登入 SSO 的實現
- Python爬蟲實戰之(五)| 模擬登入wechatPython爬蟲
- 迴圈點選連結selenium模擬
- Selenium使用Cookie實現自動登入Cookie
- 模擬部落格園登陸!
- 通過session模擬登陸Session
- 使用OkHttp模擬登陸LeetCodeHTTPLeetCode
- GD-WLAN登入頁面抓包及curl模擬方法
- 2019年最新 Python 模擬登入知乎 支援驗證碼Python
- Python爬蟲實戰之(四)| 模擬登入京東商城Python爬蟲
- 模擬登陸——以github為例Github
- mumu模擬器 adb shell 登入後執行命令 Inappropriate ioctl for deviceAPPdev
- 爬蟲模擬登入破解無原圖滑動驗證碼爬蟲
- Vue+Mock.js模擬登入和表格的增刪改查VueMockJS
- python:selenium測試登入在chrome中閃退PythonChrome
- SpringBoot+Selenium模擬使用者操作瀏覽器Spring Boot瀏覽器
- Selenium系列教程-07 使用Actions類模擬複雜操作
- Python培訓分享:python如何用cookie實現自動模擬登入?PythonCookie
- 讓我大吃一塹的前後分離 web 站模擬登入Web