在昨天的文章中《Python中與selenium齊名的pyppeteer庫》我們對pyppeteer做了一個(gè)大致的介紹火鼻,后面將pyppeteer作為一個(gè)系列來講,大致按照文檔的思路來陶因,再配合一些實(shí)踐代碼,來達(dá)到深入理解的目的病毡。
啟動(dòng)器
import asyncio
from pyppeteer import launch
async def main():
browser = await launch()
page = await browser.newPage()
await page.goto('http://example.com')
await page.screenshot({'path': 'example.png'})
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
其中l(wèi)aunch是啟動(dòng)器祭务,用來啟動(dòng)瀏覽器并返回browser類,launch是屬于launcher類丁溅,該類還有另一種啟動(dòng)方式connect唤蔗,connect用于連接一個(gè)已經(jīng)打開的瀏覽器,可以在奔潰后重連窟赏,這個(gè)比selenium進(jìn)步很多妓柜。
pyppeteer.launcher.connect(options: dict = None, **kwargs) → pyppeteer.browser.Browser
連接到現(xiàn)有的chrome,browserWSEndpoint選項(xiàng)是連接到chrome的必要條件饰序。格式是ws://{port}/devtools/browser/<id>领虹,這個(gè)值可以得到wsEndpoint。
可用選項(xiàng)包括:
browserWSEndpoint(str):要連接的瀏覽器websocket端點(diǎn)求豫。(必填)
ignoreHTTPSErrors(bool):是否忽略HTTPS錯(cuò)誤塌衰。默認(rèn)為 False。
slowMo (int | float):按指定的毫秒數(shù)減慢pyppeteer的速度蝠嘉。
logLevel(int | str):用于打印日志的日志級別最疆。默認(rèn)值與根記錄器相同。
loop(asyncio.AbstractEventLoop):事件循環(huán)(實(shí)驗(yàn))蚤告。
connect方法需要一個(gè)必須參數(shù)browserWSEndpoint努酸,這個(gè)參數(shù)通過browser的wsEndpoint屬性獲得:
brwoser.wsEndpoint
'ws://127.0.0.1:3533/devtools/browser/6687308b-2c43-4ccb-9464-1d2c1fec7eb5'
至于啟動(dòng)器launcher的launch配置參數(shù)在《Python中與selenium齊名的pyppeteer庫》中已經(jīng)詳細(xì)說明。
另一個(gè)launcher的方法是launcher.executablePath()杜恰,可執(zhí)行瀏覽器的默認(rèn)路徑获诈。
from pyppeteer import launcher
launcher.executablePath()
'C:\Users\Administrator\AppData\Local\pyppeteer\pyppeteer\local-chromium\575458\chrome-win32\chrome.exe'
Browser類
通過啟動(dòng)器我們可以創(chuàng)建一個(gè)瀏覽器類Browser,比selenium復(fù)雜的地方是多了Browser類心褐,具體的頁面操作是在Browser的newPage方法上的舔涎,但是Browser也提供了一些優(yōu)勢,與瀏覽器進(jìn)程的交互逗爹、多個(gè)頁面對象的上文管理亡嫌、模擬瀏覽器的基礎(chǔ)設(shè)置、創(chuàng)建隱身瀏覽器掘而;Browser就相當(dāng)于一個(gè)管家挟冠,管理具體工作的頁面,這也是pyppeteer的優(yōu)勢袍睡。
它具有下列一些方法和屬性:
browserContexts
返回所有打開的瀏覽器上下文的列表知染。在新創(chuàng)建的瀏覽器中,這將返回單個(gè)實(shí)例 [BrowserContext]
close()
關(guān)閉連接并終止瀏覽器進(jìn)程斑胜。
createIncogniteBrowserContext()
[已棄用]舊方法控淡。
改用createIncognitoBrowserContext()方法色瘩。
創(chuàng)建一個(gè)新的隱身瀏覽器上下文,不會(huì)與其他瀏覽器上下文共享cookie /緩存逸寓。
browser = await launch()
Create a new incognito browser context.
context = await browser.createIncognitoBrowserContext()
Create a new page in a pristine context.
page = await context.newPage()
Do stuff
await page.goto('https://example.com')
...
disconnect()
斷開瀏覽器,斷開不等于關(guān)閉居兆,斷開后還可以通過connect連接
newPage()
在此瀏覽器上創(chuàng)建新頁面并返回其對象。
pages()
獲取此瀏覽器的所有頁面竹伸。此處不會(huì)列出不可見的頁面泥栖,例如
background_page,可以通過pyppeteer.target.Target.page()查看勋篓。
process
返回此瀏覽器的進(jìn)程吧享。
如果創(chuàng)建瀏覽器的是實(shí)例pyppeteer.launcher.connect(),則返回None譬嚣。
brwoser.process
<subprocess.Popen object at 0x02E03190>
targets()
獲取瀏覽器中所有活動(dòng)的頁面列表钢颂。在多個(gè)瀏覽器上下文的情況下,該方法將返回包含所有瀏覽器上下文中的所有目標(biāo)的列表拜银。
userAgent()
返回瀏覽器的原始用戶代理殊鞭。注意頁面類可以設(shè)置代理setUserAgent()。
version()
獲取瀏覽器的版本尼桶。
wsEndpoint
返回websocket端點(diǎn)url操灿。
brwoser.wsEndpoint
'ws://127.0.0.1:4636/devtools/browser/ccb4bd48-4572-468d-8549-1f4f27da8737'
BrowserContext 類
基類:pyee.EventEmitter
BrowserContext用于創(chuàng)建多個(gè)獨(dú)立的瀏覽器會(huì)話,啟動(dòng)瀏覽器時(shí)泵督,它默認(rèn)使用一個(gè)BrowserContext趾盐。browser.newPage()在默認(rèn)瀏覽器上下文中創(chuàng)建頁面,如果頁面打開另一個(gè)頁面小腊,例如通過window.open調(diào)用救鲤,則彈出窗口也屬于初始化創(chuàng)建的瀏覽器上下文。
可以通過browser.createIncognitoBrowserContext()再創(chuàng)建一個(gè)隱身瀏覽器進(jìn)程秩冈,“隱身”瀏覽器上下文不會(huì)將任何數(shù)據(jù)寫入磁盤本缠。
Create new incognito browser context
context = await browser.createIncognitoBrowserContext()
Create a new page inside context
page = await context.newPage()
... do stuff with page ...
await page.goto('https://example.com')
Dispose context once it's no longer needed
await context.close()
該類具備下列方法:
close()
關(guān)閉瀏覽器上下文,將關(guān)閉屬于瀏覽器上下文的所有頁面。
isIncognite()
[已棄用]改用isIncognito()方法漩仙。
isIncognito()
返回BrowserContext是否隱身搓茬。
newPage()
在瀏覽器上下文中創(chuàng)建新頁面犹赖。
targets()
返回瀏覽器上下文中所有活動(dòng)目標(biāo)的列表队他。
BrowserContext 和Browser都是用于創(chuàng)建一個(gè)瀏覽器對象,前者是創(chuàng)建一個(gè)隱身瀏覽器峻村,創(chuàng)建瀏覽器對象之后進(jìn)而創(chuàng)建Page對象麸折,頁面的所有操作都在Page對象上,下一節(jié)將講Page對象粘昨。
重要:因?yàn)橥焦柕奈恼赂袷胶茈y保證垢啼,所以后面文章選擇性在其他平臺同步窜锯,歡迎移步公眾號(Python之戰(zhàn)),每日更新原汁原味!