微軟開源最強Python自動化神器Playwright!不用寫一行代碼忙厌!

(轉(zhuǎn))大家好凫岖,我是boy哥。

相信玩過爬蟲的朋友都知道selenium慰毅,一個自動化測試的神器工具隘截。寫個Python自動化腳本解放雙手基本上是常規(guī)的操作了扎阶,爬蟲爬不了的汹胃,就用自動化測試湊一湊。

雖然selenium有完備的文檔东臀,但也需要一定的學(xué)習(xí)成本着饥,對于一個純小白來講還是有些門檻的。

最近惰赋,微軟開源了一個項目叫「playwright-python」宰掉,簡直碉堡了!這個項目是針對Python語言的純自動化工具赁濒,連代碼都不用寫轨奄,就能實現(xiàn)自動化功能。

可能你會覺得有點不可思議拒炎,但它就是這么厲害挪拟。下面我們一起看下這個神器。

1. Playwright介紹

Playwright是一個強大的Python庫击你,僅用一個API即可自動執(zhí)行Chromium玉组、Firefox谎柄、WebKit等主流瀏覽器自動化操作,并同時支持以無頭模式惯雳、有頭模式運行朝巫。

Playwright提供的自動化技術(shù)是綠色的、功能強大石景、可靠且快速劈猿,支持Linux、Mac以及Windows操作系統(tǒng)潮孽。

2. Playwright使用

安裝

Playwright的安裝非常簡單祖屏,兩步走伴榔。

# 安裝playwright庫pip install playwright# 安裝瀏覽器驅(qū)動文件(安裝過程稍微有點慢)python -m playwright install復(fù)制代碼

上面兩個pip操作分別安裝:

安裝Playwright依賴庫,需要Python3.7+

安裝Chromium、Firefox椿访、WebKit等瀏覽器的驅(qū)動文件

錄制

使用Playwright無需寫一行代碼,我們只需手動操作瀏覽器乌昔,它會錄制我們的操作雷逆,然后自動生成代碼腳本。

下面就是錄制的命令codegen粟矿,僅僅一行凰棉。

# 命令行鍵入 --help 可看到所有選項python -m playwright codegen復(fù)制代碼

codegen的用法可以使用--help查看,如果簡單使用就是直接在命令后面加上url鏈接陌粹,如果有其他需要可以添加options撒犀。

python -m playwright codegen --helpUsage: index codegen [options] [url]openpageandgenerate codeforuser actionsOptions:? -o, --output ? saves the generated script to a file? --target ? ? ? language to use, one of javascript, python, python-async, csharp (default:"python")? -h, --helpdisplayhelpforcommandExamples:? $ codegen? $ codegen --target=python? $ -b webkit codegen https://example.com復(fù)制代碼

options含義:

-o:將錄制的腳本保存到一個文件

--target:規(guī)定生成腳本的語言,有JS和Python兩種掏秩,默認(rèn)為Python

-b:指定瀏覽器驅(qū)動

比如或舞,我要在baidu.com搜索,用chromium驅(qū)動蒙幻,將結(jié)果保存為my.py的python文件映凳。

python -m playwright codegen --target python -o 'my.py' -b chromium https://www.baidu.com復(fù)制代碼

命令行輸入后會自動打開瀏覽器,然后可以看見在瀏覽器上的一舉一動都會被自動翻譯成代碼邮破,如下所示诈豌。

>need-to-insert-img

結(jié)束后自動關(guān)閉瀏覽器,保存生成的自動化腳本到py文件抒和。

from playwright import sync_playwrightdef run(playwright):? ? browser = playwright.chromium.launch(headless=False)? ? context = browser.newContext()? ? # Open new page? ? page = context.newPage()? ? page.goto("https://www.baidu.com/")? ? page.click("input[name=\"wd\"]")? ? page.fill("input[name=\"wd\"]", "jingdong")? ? page.click("text=\"京東\"")? ? ? # Click //a[normalize-space(.)='京東JD.COM官網(wǎng) 多快好省 只為品質(zhì)生活']? ? with page.expect_navigation():? ? ? ? with page.expect_popup() as popup_info:? ? ? ? ? ? page.click("http://a[normalize-space(.)='京東JD.COM官網(wǎng) 多快好省 只為品質(zhì)生活']")? ? ? ? page1 = popup_info.value? ? # ---------------------? ? context.close()? ? browser.close()with sync_playwright() as playwright:? ? run(playwright)復(fù)制代碼

此外矫渔,playwright還提供了同步和異步的API接口,文檔如下摧莽。

鏈接:https://microsoft.github.io/playwright-python/index.html

同步

下面示例代碼:依次打開三個瀏覽器庙洼,前往baidu搜索,截圖后退出。

fromplaywrightimportsync_playwrightwithsync_playwright()asp:forbrowser_typein[p.chromium, p.firefox, p.webkit]:? ? ? ? browser = browser_type.launch()? ? ? ? page = browser.newPage()? ? ? ? page.goto('https://baidu.com/')? ? ? ? page.screenshot(path=f'example-{browser_type.name}.png')? ? ? ? browser.close()復(fù)制代碼

異步

異步操作可結(jié)合asyncio同時進行三個瀏覽器操作送膳。

importasynciofromplaywrightimportasync_playwrightasyncdefmain():asyncwithasync_playwright()asp:forbrowser_typein[p.chromium, p.firefox, p.webkit]:? ? ? ? ? ? browser =awaitbrowser_type.launch()? ? ? ? ? ? page =awaitbrowser.newPage()awaitpage.goto('http://baidu.com/')awaitpage.screenshot(path=f'example-{browser_type.name}.png')awaitbrowser.close()asyncio.get_event_loop().run_until_complete(main())復(fù)制代碼

移動端

更厲害的是员魏,playwright還可支持移動端的瀏覽器模擬。 下面是官方文檔提供的一段代碼叠聋,模擬在給定地理位置上手機iphone 11 pro上的Safari瀏覽器撕阎,首先導(dǎo)航到maps.google.com,然后執(zhí)行定位并截圖碌补。

fromplaywrightimportsync_playwrightwithsync_playwright()asp:? ? iphone_11 = p.devices['iPhone 11 Pro']? ? browser = p.webkit.launch(headless=False)? ? context = browser.newContext(? ? ? ? **iphone_11,? ? ? ? locale='en-US',? ? ? ? geolocation={'longitude':12.492507,'latitude':41.889938},? ? ? ? permissions=['geolocation']? ? )? ? page = context.newPage()? ? page.goto('https://maps.google.com')? ? page.click('text="Your location"')? ? page.screenshot(path='colosseum-iphone.png')? ? browser.close()復(fù)制代碼

另外虏束,還可以配合pytest插件一起使用,感興趣可以自己試一下厦章。

3. 總結(jié)

playwright相比已有的自動化測試工具有很多優(yōu)勢镇匀,比如:

跨瀏覽器,支持Chromium袜啃、Firefox汗侵、WebKit

跨操作系統(tǒng),支持Linux群发、Mac晰韵、Windows

可提供錄制生成代碼功能,解放雙手

可用于移動端

目前存在的缺點就是生態(tài)和文檔還不是非常完備熟妓,比如沒有API中文文檔雪猪、沒有較好的教程和示例供學(xué)習(xí)。不過相信起愈,隨著知道的人越來越多只恨,未來會越來越好。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抬虽,一起剝皮案震驚了整個濱河市官觅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斥赋,老刑警劉巖缰猴,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異疤剑,居然都是意外死亡,警方通過查閱死者的電腦和手機闷堡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門隘膘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人杠览,你說我怎么就攤上這事弯菊。” “怎么了踱阿?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵管钳,是天一觀的道長钦铁。 經(jīng)常有香客問我,道長才漆,這世上最難降的妖魔是什么牛曹? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮醇滥,結(jié)果婚禮上黎比,老公的妹妹穿的比我還像新娘。我一直安慰自己鸳玩,他們只是感情好阅虫,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著不跟,像睡著了一般颓帝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上窝革,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天躲履,我揣著相機與錄音,去河邊找鬼聊闯。 笑死工猜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的菱蔬。 我是一名探鬼主播篷帅,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拴泌!你這毒婦竟也來了魏身?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤蚪腐,失蹤者是張志新(化名)和其女友劉穎箭昵,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體回季,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡家制,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了泡一。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颤殴。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鼻忠,靈堂內(nèi)的尸體忽然破棺而出涵但,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布矮瘟,位于F島的核電站瞳脓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏澈侠。R本人自食惡果不足惜劫侧,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望埋涧。 院中可真熱鬧板辽,春花似錦、人聲如沸棘催。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽醇坝。三九已至邑跪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間呼猪,已是汗流浹背画畅。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宋距,地道東北人轴踱。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像谚赎,于是被迫代替她去往敵國和親淫僻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

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