安卓ui自動化測試 驗證碼自動識別輸入 登錄


 

 

 這里的文字 是有ID位置的,並且圖片是背景圖片,所以不需要圖片文字識別操作。

 

# -*- encoding=utf8 -*-
__author__ = "admin-fly"

from airtest.core.api import *
auto_setup(__file__)

from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)


#poco(text="CF-MY-Sta").click()
stop_app('sta.onion.cosyfans')

start_app('sta.onion.cosyfans')

sleep(2)
poco("android.widget.ImageView").click()
poco("android.widget.ImageView").click()
sleep(1)
poco("android.widget.LinearLayout").offspring("android:id/content").offspring("sta.onion.cosyfans:id/nav_view").offspring("sta.onion.cosyfans:id/nav_mycosy").child("sta.onion.cosyfans:id/icon").click()
poco("sta.onion.cosyfans:id/btn_login").click()

poco("sta.onion.cosyfans:id/edit_phone").set_text("")
poco("sta.onion.cosyfans:id/edit_phone").set_text("191234000")
sleep(1)
poco("sta.onion.cosyfans:id/edit_pass").set_text("")
poco("sta.onion.cosyfans:id/edit_pass").set_text("qwe123")

a1=poco("sta.onion.cosyfans:id/tv_code").attr('text')
log("需要點擊得驗證碼得數值為:")
print(a1)
b1=poco("sta.onion.cosyfans:id/tv_code").get_text()
print(b1)
#獲取 待驗證的驗證碼 數字
V_code1=a1[1]
V_code2=a1[2]
V_code3=a1[3]

#需要點擊的驗證碼的數值
t01=poco("sta.onion.cosyfans:id/tv_code1").attr('text')
t02=poco("sta.onion.cosyfans:id/tv_code2").attr('text')
t03=poco("sta.onion.cosyfans:id/tv_code3").attr('text')
t04=poco("sta.onion.cosyfans:id/tv_code4").attr('text')
print(t01)
t1=t01[0]
t2=t02[0]
t3=t03[0]
t4=t04[0]

#拿第1個字符去跟圖片上的文字比較,匹配則 選中
if V_code1==t1:
poco("sta.onion.cosyfans:id/tv_code1").click()
elif V_code1==t2:
poco("sta.onion.cosyfans:id/tv_code2").click()
elif V_code1==t3:
poco("sta.onion.cosyfans:id/tv_code3").click()
else:
poco("sta.onion.cosyfans:id/tv_code4").click()

#拿第2個字符去跟圖片上的文字比較,匹配則 選中
if V_code2==t1:
poco("sta.onion.cosyfans:id/tv_code1").click()
elif V_code2==t2:
poco("sta.onion.cosyfans:id/tv_code2").click()
elif V_code2==t3:
poco("sta.onion.cosyfans:id/tv_code3").click()
else:
poco("sta.onion.cosyfans:id/tv_code4").click()

#拿第3個字符去跟圖片上的文字比較,匹配則 選中

if V_code3==t1:
poco("sta.onion.cosyfans:id/tv_code1").click()
elif V_code3==t2:
poco("sta.onion.cosyfans:id/tv_code2").click()
elif V_code3==t3:
poco("sta.onion.cosyfans:id/tv_code3").click()
else:
poco("sta.onion.cosyfans:id/tv_code4").click()

#登錄操作
poco("sta.onion.cosyfans:id/btn_login").click()


poco(text="My Cosy").click()

#驗證登錄是否成功
assert_exists(Template(r"tpl1620789782432.png", record_pos=(0.19, -0.867), resolution=(1080, 2160)), "以進入個人中心作為登錄得斷言結果")

上面的這些 因為是有ID位置的 並且是有文本文字的,它只是嵌入了背景圖片,所以不需要圖片文字識別,以上的方法就可以 直接 自動輸入登錄了!。。。。。。 

 

關於嵌入圖片中的文字 識別的一些看法:

驗證碼本意是為了加強安全防控,規避惡意登錄。所以對於需要圖片識別的驗證碼 去識別破解,識別率不高。

PS:對於文字嵌入 圖片中,並且文字的位置是動態變化的 這種圖片文字識別驗證的話 存在一個識別率的問題,並且位置動態變化,識別這個定位也不准確。

在識別之前對圖片進行了 對比度、色彩度等加強處理,發現識別的效果也不明顯。

圖片識別采用了 百度雲API中的文字識別,基本每次只能識別2-3個文字, 我做了一個循環去識別也無法滿足要求,並且百度雲API請求次數還有限制。

如果非要利用圖片識別破解,那必須需要寫一個識別算法的方法,然后拿到原圖進行識別,並且為了提升識別率,再循環調用算法 匹配正確則停止調用。

這種圖片文字識別的 不好解決,只能通過 請求 登錄接口 進入系統主頁,拿到瀏覽器cookies信息,再刷新頁面,這樣進入系統主頁 繞過驗證碼。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM