Playwright跨文件导入代码报错:module 'playwright' has no attribute 'chromium'
解决Playwright + APScheduler 触发任务时的AttributeError问题
错误信息
Job "runF5 (trigger: interval[1 day, 0:00:00], next run at: 2023-01-31 00:24:00 PKT)" raised an exception Traceback (most recent call last): File "E:\pyton\Lib\site-packages\apscheduler\executors\base.py", line 125, in run_job retval = job.func(*job.args, **job.kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "e:\completed zameen project\combined.py", line 11, in runF5 m5.runF5(playwright) File "e:\completed zameen project\m5.py", line 131, in runF5 browser = playwright.chromium.launch(headless=False, slow_mo=600) ^^^^^^^^^^^^^^^^^^^ AttributeError: module 'playwright' has no attribute 'chromium'
问题原因
文件2中直接传递了playwright模块对象给m5.runF5(),但文件1的runF5函数需要的是**Playwright类的实例**,而非模块本身。chromium是Playwright实例的属性,模块级别的playwright并没有这个属性,因此触发报错。
解决方案
方案1:在文件2中正确获取Playwright实例传递
修改文件2代码,通过sync_playwright()获取Playwright实例后再传递:
from playwright.sync_api import sync_playwright import m5 from apscheduler.schedulers.background import BackgroundScheduler def runF5(): with sync_playwright() as playwright: m5.runF5(playwright) scheduler = BackgroundScheduler() scheduler.add_job(runF5, 'interval', days=1, start_date='2022-01-01 03:31:00', timezone='Asia/Karachi') scheduler.start() while True: pass
方案2:让文件1的函数自行处理Playwright实例(更简洁)
修改文件1的runF5函数,内部直接启动Playwright,无需外部传参:
from playwright.sync_api import sync_playwright, expect import random import time import sys import pyautogui def runF5() -> None: with sync_playwright() as playwright: browser = playwright.chromium.launch(headless=False, slow_mo=600) context = browser.new_context() page = browser.new_page() page.goto('https://www.google.com/', timeout=0) # 后续操作完成后可主动关闭浏览器 browser.close()
对应文件2代码简化为:
import m5 from apscheduler.schedulers.background import BackgroundScheduler def runF5(): m5.runF5() scheduler = BackgroundScheduler() scheduler.add_job(runF5, 'interval', days=1, start_date='2022-01-01 03:31:00', timezone='Asia/Karachi') scheduler.start() while True: pass
关键说明
sync_playwright()是Playwright提供的同步API入口,上下文管理器会自动处理Playwright的启动与关闭。- 确保已安装对应浏览器驱动,可执行命令
playwright install chromium完成安装。
内容的提问来源于stack exchange,提问作者noob
相关产品推荐
相关产品推荐

