嗨,各位Python程序員,放棄selenium,試試年輕的Playwright如何?

語言: CN / TW / HK

持續創作,加速成長!這是我參與「掘金日新計劃 · 10 月更文挑戰」的第15天,點擊查看活動詳情

⛳️ 實戰場景

上一篇博客我們首次接觸年輕的自動化模塊 playwright,驚訝於其代碼錄製功能,今天咱們接着學習一下,其 API 相關知識。

正式學習前,先把基礎示例代碼呈現給大家。

```python from playwright.sync_api import sync_playwright

with sync_playwright() as p: browser = p.chromium.launch(headless=False)

page = browser.new_page()
page.goto("http://example.com")
print(page.title())
browser.close()

```

注意上述代碼使用的不是無頭瀏覽器,運行代碼得到請求站點的標題,下面繼續對代碼進行擴展。

⛳️ 實現瀏覽器截圖

通過瀏覽器打開站點之後,可以對網頁默認展示區域進行截圖操作,代碼如下:

```python from playwright.sync_api import sync_playwright

with sync_playwright() as p: browser = p.chromium.launch(headless=False)

page = browser.new_page()
page.goto("http://example.com")
page.screenshot(path="example.png")
browser.close()

```

在運行目錄生成如下圖片: 嗨,各位Python程序員,放棄selenium,試試年輕的Playwright如何?

⛳️ 將截圖代碼優化為異步模式

上述截圖代碼為同步模式,可以進行簡單的修改,從而調整為異步模式。

```python import asyncio from playwright.async_api import async_playwright

async def main(): async with async_playwright() as p: browser = await p.chromium.launch(headless=False) page = await browser.new_page() await page.goto('http://example.com') await page.screenshot(path='example.png') await browser.close()

asyncio.get_event_loop().run_until_complete(main()) ```

這裏一定要注意 async_playwrightsync_playwright 導入模式,互聯網很多博客這裏都寫錯誤,也不知道他們的代碼是怎麼運行起來的,對比代碼如下所示:

python from playwright.async_api import async_playwright # 異步導入 from playwright.sync_api import sync_playwright # 同步導入

⛳️ 模擬手機端訪問

模擬手機操作用到的核心方法如下所示:

  • p.devices[phone_name]:選擇設備名,可以從谷歌瀏覽器的開發者工具中進行選擇,截圖在代碼後。
  • browser.new_context():初始化瀏覽器的時候,可以進行參數配置。

```python from playwright.sync_api import sync_playwright # 同步導入

with sync_playwright() as p: phone_name = 'iPhone 13' iphone_13 = p.devices[phone_name] browser = p.webkit.launch(headless=False) context = browser.new_context( **iphone_13, locale='zh-CN' ) page = context.new_page() page.goto('https://baidu.com') page.screenshot(path=f'{phone_name}.png') # browser.close() ```

可以選擇的設備名稱(包含但不限於!) 嗨,各位Python程序員,放棄selenium,試試年輕的Playwright如何? 運行上述代碼,可以模擬手機訪問效果。

本篇博客最後補充的知識點是 browser.new_context() 方法的詳細參數説明(全網首發)。

  • accept_downloads:布爾類型,是否自動下載所有附件,默認為 True
  • base_url:根路徑,這個參數要配合 goto()route() 方法使用;
  • bypass_csp:布爾類型,跨域攻擊配置;
  • device_scale_factor:設備比例基數,默認是 1.0
  • extra_http_headers:字典對象,每個請求發送的附加 HTTP 頭的對象;
  • geolocation:地理位置,字典格式,包含經緯度,以及精度;
  • ignore_https_errors:發送網絡請求時是否忽略 HTTPS 錯誤;
  • is_mobile:是否考慮 meta-viewport 標記並啟用觸摸事件,不支持火狐;
  • java_script_enabled:是否支持 JS;
  • locale:指定用户區域設置;
  • no_viewport:不強制固定窗口,允許在標題模式下調整窗口大小;
  • offline:是否離線模式;
  • proxy:代理設置;
  • storage_state:用户狀態設置,例如 cookiesorigins
  • user_agent:用户代理設置;
  • viewport:窗口大小,默認 1280*720,也可以通過字典設置寬度和高度。

📢📢📢📢📢📢 💗 你正在閲讀 【夢想橡皮擦】 的博客 👍 閲讀完畢,可以點點小手贊一下 🌻 發現錯誤,直接評論區中指正吧 📆 橡皮擦的第 730 篇原創博客

「其他文章」