一.簡單代碼示例
import asyncio
from pyppeteer import launch
async def main():
browser = await launch()
page = await browser.newPage() #打開一個新頁面
await page.goto('https://www.baidu.com/') #訪問百度
await page.screenshot({'path': 'baidu.png'}) #截圖並存儲
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
二.page對象的方法
await page.方法
1.設置相關
setUserAgent(str)
設置UserAgent
setCookie(cookie1, cookie2.......)
設置cookie
cookies 應該是包含這些字段的字典:
name(str):必填
value(str):必填
url (STR)
domain (STR)
path (STR)
expires (數字):Unix時間,以秒為單位
httpOnly (布爾)
secure (布爾)
sameSite(str):'Strict'或'Lax'
2.頁面相關
goto(url)
訪問網頁
reload()
頁面加載完畢
goBack()/goForward()
頁面后退/頁面前進
3.執行js
evaluate(js_str)
對於某個元素執行js
4.截圖
screenshot(dict)
dict
中key
path(str):保存圖像的文件路徑。屏幕截圖類型將從文件擴展名中推斷出來。 #基本上寫個這個就夠了
type(str):指定屏幕截圖類型,可以是jpeg或 png。默認為png。
quality(int):圖像的質量,在0-100之間。不適用於png圖像。
fullPage(bool):如果為true,請截取完整的可滾動頁面。默認為False。
clip(字典):指定頁面剪切區域的對象。此選項應包含以下字段:
x (int):剪輯區域左上角的x坐標。
y (int):剪輯區域左上角的y坐標。
width (int):剪切區域的寬度。
height (int):剪切區域的高度。
omitBackground (bool):隱藏默認的白色背景並允許捕獲具有透明度的屏幕截圖。
5.保存pdf
pdf(dict)
返回: 返回生成的PDF bytes對象。
path (str):保存PDF的文件路徑。
scale(float):網頁渲染的比例,默認為1。
displayHeaderFooter(bool):顯示頁眉和頁腳。默認為False。
headerTemplate(str):打印標題的HTML模板。應該是有效的HTML標記與以下類。
date:格式化的打印日期
title:文件名
url:文件位置
pageNumber:當前頁碼
totalPages:文檔中的總頁數
footerTemplate(str):打印頁腳的HTML模板。應該使用相同的模板headerTemplate。
printBackground(bool):打印背景圖形。默認為 False。
landscape(bool):紙張方向。默認為False。
pageRanges(字符串):要打印的紙張范圍,例如“1-5,8,11-13”。默認為空字符串,表示所有頁面。
format(str):紙張格式。如果設置,優先於 width或height。默認為Letter。
width (str):紙張寬度,接受標有單位的值。
height (str):紙張高度,接受標有單位的值。
margin(字典):紙張邊距,默認為None。
top (str):上邊距,接受標有單位的值。
right (str):右邊距,接受標有單位的值。
bottom (str):底部邊距,接受標有單位的值。
left (str):左邊距,接受標有單位的值。
6.獲取內容
content()
頁面文本
print(await page.evaluate('document.body.textContent', force_expr=True)) 這樣也行
cookies()
頁面cookies
title()
標題
7.獲取元素
返回都是ElementHandle
或者None
print(await page.querySelector('div選擇器')) #獲取第一個
print(await page.querySelectorAll("CSS選擇器")) #獲取全部
querySelectorEval('css選擇器','js_str','前面js需要的參數') #獲取第一個並對其執行js
querySelectorAllEval('css選擇器','js_str','前面js需要的參數') #獲取全部並對其執行js
await page.xpath('xpath選取器')
8.等待方式
# await page.waitForXPath('h3', timeout=300)
# await page.waitForNavigation(waitUntil="networkidle0")
# await page.waitForFunction('document.getElementByTag("h3")')
# await page.waitForSelector('.t')
# await page.waitFor('document.querySelector("#t")')
# await page.waitForNavigation(waitUntil='networkidle0')
# await page.waitForFunction('document.querySelector("").innerText.length == 7')
9.獲取ElementHandle里的屬性或者文本
await (await ElementHandle_obj.getProperty('屬性')).jsonValue()
await (await ElementHandle_obj.getProperty('textContent')).jsonValue() #文本
10.與瀏覽器交互
可以參考這個應為request_html就是封裝了pyppeteer