不需要驅動的自動化

布都御魂發表於2024-09-27
import asyncio
from Decorator import Decorator
from playwright.async_api import async_playwright
class MyClass:
    @Decorator.retry
    async def run_html(self, playwright, url: str):
        # 啟動 Chromium 瀏覽器,無頭模式(headless=True 表示不顯示瀏覽器介面)
        browser = await playwright.chromium.launch(headless=False)
        # 在瀏覽器中建立一個新的上下文
        context = await browser.new_context()
        # 在上下文裡建立一個新的頁面
        page = await context.new_page()
        # 向頁面新增一個初始化指令碼,指令碼的路徑為 './stealth.min.js'
        # await page.add_init_script(path='./stealth.min.js')
        # 導航到指定的 URL,設定超時時間為 4000 毫秒
        await page.goto(url, timeout=4000)
        # 暫停 5 秒
        await asyncio.sleep(5)
        # 獲取頁面的內容
        fp = await page.content()
        # 返回頁面內容
        return fp
    async def response_page(self, page_url):
        # 使用async_playwright上下文管理器來初始化playwright物件。這是Playwright庫的常見用法,
        # 用於管理Playwright相關資源的建立和釋放。
        async with async_playwright() as playwright:
            # 呼叫self物件的run_html方法(假設self是一個類例項,並且run_html方法是在該類中定義的),
            # 傳入playwright物件和page_url,並等待這個非同步操作完成。
            # 這個操作可能是獲取指定page_url的頁面 HTML 內容,結果儲存在res變數中。
            res = await self.run_html(playwright, page_url)
            # 檢查是否成功獲取到頁面內容。如果res不為空(表示獲取成功),則繼續後續操作;
            # 否則,可能會有相應的錯誤處理(這裡未顯示)
            return res
async def main():
    obj = MyClass()
    page_url='http://edutoutiao.com/zxx/15233.html'
    result = await obj.response_page(page_url)
    print(result)

asyncio.run(main())

相關文章