Appium+python在微信的hybridapp里的坑

最近受有人委托,想搞個自動化腳本浓恶,基于微信公眾號的!聽到這個請求的時候第一反應(yīng)是這簡單呀结笨,用Appium就可以實現(xiàn)呀包晰!于是很隨意的就答應(yīng)了!事實確實如此嗎炕吸?先來說下過程吧

一杜窄、環(huán)境:Python35-32

? ? ? ? ? ?Pycharm

? ? ? ? ? ?AndroidADT(使用adb、aapt和工具uiautomatorviewer)

? ? ? ? ? ?Appium_Python_Client-0.24-py3.5.egg-info

? ? ? ? ? ?AppiumForWindows_1_4_16_1 ?借用蟲師的鏈接:bitbucket.org/appium/appium.app/downloads/

二算途、實驗:

? ? ? ? ?1. 在真機上驗證塞耕,將Android手機連接到電腦,勾選手機的USB調(diào)試嘴瓤;

? ? ? ? ?2. 回到pc端扫外,在cmd下輸入:adb devices,得到手機的devicesName,如圖:

到甲方打開

? ? ? ? ? 3. 打開Appium,啟動

? ? ? ? ? 4. 編寫代碼,得到 deviceName后廓脆,還需要兩個比較重要的東西筛谚,apppackage和appactivity,這里提供一個方法:在AndroidADT包中查找aapt.exe,一般會在build-tools包下面。找到次程序路徑停忿,在cmd下進到該路勁后驾讲,如:D:\AndroidADT\AndroidADT\sdk\build-tools\android-4.3>。輸入aapt命令:

?ndroidADT\sdk\build-tools\android-4.3>aapt d badgingD:\\weixin_1120.apk

在信息中找到package name :


和activity:


有了這些信息后,代碼中的desired_caps字典已經(jīng)可以使用了吮铭。代碼如下:


? ? ? ? ? 5. 使用:driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)得到appium的driver對象时迫,運行代碼,得到微信頁面并成功登錄谓晌。接下來就該來登錄公眾號了


這個過程中所有元素都可以通過AndroidADT中的工具uiautomatorviewer.exe來獲取掠拳,具體方法如下:


下一步:


下一步:


? ? ? ? ? ? 6. 到此,一切都還順利纸肉!而且我發(fā)現(xiàn)溺欧,在真機上運行appium,不再有模擬器上那種便秘的感覺柏肪,重拾selenium的絲滑般的感覺姐刁!但是,這種感覺并不能持續(xù)烦味。難點出現(xiàn)了:



程序走到這聂使,我發(fā)現(xiàn)app里面的元素不能用uiautomatorviewer獲取了,信息部分變成了一個整體拐叉,這是為什么呢岩遗?實際上扇商,這個問題的原因要回到webapp的基礎(chǔ)上來凤瘦,當采用混合模式來開發(fā)app,主流技術(shù)都是原生加web的方式,要在原生中加入瀏覽器就必須使用webview來實現(xiàn)頁面和殼在和手機系統(tǒng)的數(shù)據(jù)交換案铺。那么蔬芥,這里一定是內(nèi)嵌了一個頁面,如圖:


這里就在uiautomatorviewer里看到了webkit.webview這個東西控汉。怎么獲取到這個webview呢笔诵?

翻閱了海量的網(wǎng)友水貼,最終得到了2個有用的信息:

(1)獲取webview的方法姑子,當然這里寫的是Python的方法乎婿,其他語言只能自己去百度了:

cons = driver.contexts #獲取當前上下文,返回一個列表

print(cons) ?#查看列表所有內(nèi)容街佑,期望獲得webview的名字谢翎,有它才能將appium的native轉(zhuǎn)換

懷著無比興奮的心情將代碼添加進去,結(jié)果如大家所料沐旨,也和很多朋友的嘗試結(jié)果相同森逮,結(jié)果只有['NATIVE_APP'],說好的webview呢?又是漫漫的百度求學路磁携,大神們各種裝褒侧,可惜沒有一個靠譜。咋辦?

老老實實回來自己研究這個公眾號闷供,既然在uiautomatorviewer里可以抓取到烟央,說明webview是出現(xiàn)了的,不像某些大神說的这吻,需要求前端加代碼吊档,我又不是馬家軍,公眾號咋能加得進去唾糯?難道就此真無路可走了怠硼?根據(jù)selenium webdriver的經(jīng)驗,我觀察這個內(nèi)嵌頁面加載過程耗時較長移怯,那有沒有可能是沒有加載完成就去獲取了這個context呢香璃?大概計算了一下加載的時間,當然這個過程并不像描述這么簡單舟误。最終我在driver.contexts的前面添加了一個強制等待time.sleep(10),當然大家也可以去嘗試顯示等待的方式來獲取葡秒。果然,再次嘗試后得到了夢寐以求的東西:

但是嵌溢,問題來了眯牧,兩個!居然有兩個赖草?学少??逗我秧骑?版确?咋用?乎折?

不管了绒疗,就用索引的方式driver._switch_to.context(cons[1])取得第一個webview切換過去,請騷年們注意骂澄,switch前面有個下劃線‘_’,沒有的話你的context()方法可能會報錯吓蘑!,結(jié)果呢坟冲?磨镶?

你以為你成功了?騷年樱衷,只怪你太年輕了棋嘲!沒有加等待time.sleep(1),我看到的只是頁面元素找不到的異常而已!前提是你要知道怎么獲取頁面元素矩桂。否則你什么也看不到沸移!

事實上痪伦,僅僅切換焦點還是不能操作內(nèi)嵌頁面的,這也是從度娘那得到的下一個有用的東西雹锣,請繼續(xù)往下看网沾。

(2) 怎么使用webview,及h5頁面的權(quán)限:

度娘里有大神說蕊爵,要想操作微信的H5頁面辉哥,你還得在前面的desired_caps字典里加東西,加什么呢攒射? ?'WEBVIEW_com.tencent.mm:tools'我們已經(jīng)獲取到了醋旦,嘗試著加進去吧!

desired_caps['chromeOptions']= {'androidProcess':'com.tencent.mm:tools'}#驅(qū)動h5,必備

然后呢会放?有這個微信還不許你操作呢饲齐!請在微信里加點料,打開任意輸入框咧最,輸入:

debugx5.qq.com

發(fā)送后捂人,點擊剛才發(fā)送的這個信息,你會發(fā)現(xiàn)有個配置頁面跳轉(zhuǎn)出來矢沿,請在是否打開TBS內(nèi)核XXX前面打上勾滥搭,如下:


一切就緒,再次點擊代碼運行捣鲸!基本實現(xiàn)了瑟匆。

? ? ? ? ?7. 使用appium從'NATIVE_APP'切換到webview過程已經(jīng)實現(xiàn)了,如何定位H5頁面就是接下來需要解決的問題摄狱!使用chrome瀏覽器 脓诡,在已連接了手機的情況下无午,在地址欄內(nèi)輸入:

chrome://inspect/#devices

頁面顯示:


會顯示出自己手機的型號和deviceName,這也是獲取deviceName的另一個途徑媒役,如果當前手機上沒有webview時,頁面不會出現(xiàn)任何其他信息宪迟,當切換到公眾號后酣衷,可以發(fā)現(xiàn):


剛才獲取不到的內(nèi)嵌頁面出現(xiàn)在頁面里面。點擊inspect,進入顯示頁面次泽,當然穿仪,如果大家和我一樣沒FQ!那么意荤,老實的復制url到新打開標簽中啊片。這時,手機公眾號的頁面就顯示在chrome瀏覽器中了玖像!如圖:


找到開發(fā)者工具就可以獲取頁面元素了紫谷,操作類似firebug,如圖:


? ? ? ? ? ?8. ?不管通過xpath還是css,前面已經(jīng)提過,請注意加入等待,但這里還有個大坑笤昨,我在這上面花了很多時間 ?祖驱。

? ? ? ?是什么坑呢,大家可以 嘗試下瞒窒,當點擊觸發(fā)捺僻,頁面跳轉(zhuǎn)后,driver對象就獲取不到任何東西了崇裁,所有的返回值都是None!我第一反應(yīng)是匕坯,會不會需要切換窗口?

加入driver.window_handles拔稳,得到了兩個handle對象醒颖,['CDwindow-2786134a-b3dd-48ad-bb0d-790c0be15871', 'CDwindow-c3656f6b-8c5c-4d47-beed-27939b1ab935']

試試driver.switch_to.window(),結(jié)果是:沒有結(jié)果,依然放回none,要不然就出現(xiàn)chrome not xxxx的異常壳炎,于是乎泞歉,我又再一次重返百度滿滿求學路,路遇一大神匿辩,悄悄的說了句腰耙,不是窗口切換,那一定是context的切換铲球,一語點醒夢中人巴ε印稼病!回來看看我們的contexts列表选侨,里面有兩個坑啊,開始還不知道這為什么是兩個呢然走!果斷使用:

driver._switch_to.context(cons[0])

driver._switch_to.context(cons[-1])

當然援制,這個過程一樣需要加入等待時間,給瀏覽器足夠的時間反應(yīng)芍瑞。我們可以在切換后加入:driver.page_source的方法來查看返回的頁面響應(yīng)晨仑,也就是跳轉(zhuǎn)后的頁面代碼,得到以后可以把代碼復制出來拆檬,放到新建的html文件中洪己,用Firefox運行!那么竟贯,seleniumIDE,fierbug任君使用答捕,定位元素是不是也就變得簡單無比了!

最后屑那,提醒下各位拱镐,當出現(xiàn)chrome not xx 的時候晌缘,網(wǎng)上說是chromedriver的問題,讓大家升級driver痢站,我也嘗試過了磷箕,使用2.20及更高版本,直接就找不到元素了阵难,所以慎用岳枷!

希望這個實例對大家有一些幫助!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呜叫,一起剝皮案震驚了整個濱河市空繁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌朱庆,老刑警劉巖盛泡,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異娱颊,居然都是意外死亡傲诵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門箱硕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拴竹,“玉大人,你說我怎么就攤上這事剧罩∷ò荩” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵惠昔,是天一觀的道長幕与。 經(jīng)常有香客問我,道長镇防,這世上最難降的妖魔是什么啦鸣? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮营罢,結(jié)果婚禮上赏陵,老公的妹妹穿的比我還像新娘饼齿。我一直安慰自己饲漾,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布缕溉。 她就那樣靜靜地躺著考传,像睡著了一般。 火紅的嫁衣襯著肌膚如雪证鸥。 梳的紋絲不亂的頭發(fā)上僚楞,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天勤晚,我揣著相機與錄音,去河邊找鬼泉褐。 笑死赐写,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的膜赃。 我是一名探鬼主播挺邀,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼跳座!你這毒婦竟也來了端铛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤疲眷,失蹤者是張志新(化名)和其女友劉穎禾蚕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狂丝,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡换淆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了几颜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片产舞。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖菠剩,靈堂內(nèi)的尸體忽然破棺而出易猫,到底是詐尸還是另有隱情,我是刑警寧澤具壮,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布准颓,位于F島的核電站,受9級特大地震影響棺妓,放射性物質(zhì)發(fā)生泄漏攘已。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一样勃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧性芬,春花似錦峡眶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至俊庇,卻和暖如春狮暑,著一層夾襖步出監(jiān)牢的瞬間鸡挠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工搬男, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拣展,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓缔逛,卻偏偏與公主長得像瞎惫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子译株,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容