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())