iT邦幫忙

0

pyppeteer要如何用APScheduler定時執行

我試圖混合成我常用的這樣

import asyncio
from pyppeteer import launch
from apscheduler.schedulers.blocking import BlockingScheduler

sched = BlockingScheduler()

async def main():
    browser = await launch(headless=False, userDataDir='./userdata', args=["--start-maximized"])
    page = await browser.newPage()
    await page.goto('https://www.gamer.com.tw/')
    await page.waitFor(1000)
    soup=BeautifulSoup(await page.content(),'html.parser')
    print(soup)
    await browser.close()

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

sched.add_job(main, 'cron',hour='0-23')
sched.start()

但是不知道什麼原因
都直接失敗
也試過sched.add_job(asyncio.get_event_loop().run_until_complete(main()), 'cron',hour='0-23')
也無法定時
這要怎麼改?

換了一個思路

from apscheduler.schedulers.blocking import BlockingScheduler
import os

sched = BlockingScheduler()

def my_job():
    os.system("實驗.py")
    
sched.add_job(my_job, 'cron',hour='0-23')
sched.start()

呼叫外部程式
雖然是能用了
但是很難調整參數之類的...
希望有人能提供pyppeteer定時定時執行的方法

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
zzm88
iT邦見習生 ‧ 2021-09-16 00:13:12

你好,请问找到解决办法了吗?我也是用定时器召唤pyppeteer,出现的错误是打开了窗口建立browser实例那里就卡住了。不用定时器却能正常。我估计是因为定时器和pyppeteer都用到了asyncio,起了冲突。具体因为说不清楚,我还不是很懂async的原理。顺便一说我是用的BackgroundScheduler

s4028600 iT邦新手 5 級 ‧ 2021-09-18 12:23:11 檢舉

目前還是呼叫外部py
但寫法不同
換寫法後倒是還沒測試同個py檔能不能執行
要測試看看

新寫法:
from 外部pyppeteer版 import 外部py

def test():
new_loop = asyncio.new_event_loop()
asyncio.set_event_loop(new_loop)
loop = asyncio.get_event_loop()
loop.run_until_complete(外部py())

s4028600 iT邦新手 5 級 ‧ 2021-09-19 00:38:09 檢舉

測試過後這個方法是可以的
這樣就不用呼叫外部py了

我要發表回答

立即登入回答