爬蟲6-PlayWright(仿真模擬器)

 

前言:

我們來講講PlayWright,他是一個微軟開發的瀏覽器模擬器,也可以用來測試網站對於瀏覽器的相容性,他提供了chrome,firefox,webkit三個模擬器,之前在使用seleium還必須特別下載driver然後配置路徑給他,有點不太好用,如果seleiumplaywright 兩個要相比的話,我會說playwright 更好用,更可以直接對element 給執行click 的動作,真的擬仿操作網站的行(未來考慮做一個流量機器人來玩)

Python 環境安裝:

pip install playwright

here is install browser emulate
playwright install

我把爬蟲最常用的幾個功能列在下面:

a.selector的基本用法:

1.以 // 或 / 或者 .. 開頭的,判斷為xpath

pp = page.querySelector("xpath=//h2")

pp = page.querySelector("//h2")

2.以引號 "" 或者 ' 開頭的,判斷為text

ppp = page.querySelector("text=文本輸入") \

ppp = page.querySelector("'文本輸入'")

注意:雙引號里有一個單引號,不然無法識別

3.其他的,都判斷為css

p = page.querySelector("css=h2")

p = page.querySelector("h2")

b.wait_for_selector:

等待你找的element出現後就會繼續往下,沒有則hand住,直到出現為止,

#會等待element已經被生成才會往下
page.wait_for_selector('div.thumb-overlay-albums > a')

c.query_selector:

如果有重複地class名,則會以找到第一個優先回傳,在尋找class 的時候同一個element無法抓取兩個以上的class 名,必須挑一個

#正常使用
page.query_selector('div.thumb-overlay-albums > a')
# if we had duplcate class name we will failed get element
# 這個會失效
page.query_selector('div.thumb-overlay-albums thumb > a')

d.query_selector_all:

可以尋找多個element以陣列方式存下來

#正常使用
arrary_element = page.query_selecto_all(r'div.thumb-overlay-albums > a')
print(arrary_element)

範例:

from playwright.sync_api import sync_playwright

playwr = sync_playwright().start()
browser = playwr.firefox.launch(
					headless=False,
					timeout=1000 * 80,
					)

context = browser.new_context()

page = context.new_page()

page.goto(self.rootUrl)

# page.wait_for_timeout(10000)

page.wait_for_selector('div.thumb-overlay-albums > a')

這邊的示範是開啟模擬器的browser然後再等待某一element 有確實顯現的動作

小提醒:

1.在使用完playwright的物件後,不使用狀況下一定要del 掉它,要不然會有leak的問題

2.playwright.sync_api在Thrading 當中必須重新產生物件,不能重複使用





留言

這個網誌中的熱門文章

Vue那些我踩過的坑(Vuex-TypeScript)

Vue(Vue3取代 Vuex?)

前端優化效能-1(lazy-img)