什么是最好的方法来使这个工作起来?
由于Selenium与asyncio不兼容,机器人最终会崩溃。
它按预期工作,但最终会崩溃。我确实了解问题所在,特别是因为selenium非常沉重,但是否有一个好的解决方法?
我收到以下错误消息: 任务已被销毁,但仍处于挂起状态!
我没有其他东西,没有回溯信息。 我必须重新启动机器人(discord),然后它会再次工作一段时间。
我忽略了网站,因为它是私有的。
我收到以下错误消息: 任务已被销毁,但仍处于挂起状态!
我没有其他东西,没有回溯信息。 我必须重新启动机器人(discord),然后它会再次工作一段时间。
@bot.command(pass_context=True)
async def weather(ctx, arg):
if ctx:
list = ('lf','oahu')
await bot.say('*Loading webdriver.....*')
if arg in list:
if arg == 'lf':
website = '--'
name = 'Los Feliz Map'
if arg == 'oahu':
website = '--'
name = 'Oahu Map'
load_site = webdriver.Chrome()
# load site on chrome
load_site.get(website)
await bot.say('*Loading ' + str(name) + '...*')
load_site.find_element_by_xpath('//*[@id="main-map"]/div[2]/div[1]/div/a[2]').click()
load_site.find_element_by_xpath('//*[@id="main-map"]/div[2]/div[2]').click()
load_site.find_element_by_xpath('//*[@id="main-map"]/div[2]/div[2]/div/form/div[3]/label[6]/div/span').click()
await asyncio.sleep(2) #sleep to ensure weather loads on site before screenshot
load_site.save_screenshot('weather.png')
await bot.say('*Taking screenshot and saving image....*')
await bot.send_file(ctx.message.channel, 'weather.png')
load_site.quit()
print('Succesfully sent image of ' + str(arg) + ' - ' + str(ctx.message.author.name))
我忽略了网站,因为它是私有的。
arsenic
似乎是个不错的选择,但你需要自己试验一下。 - Patrick Haughrun_in_executor
在它自己的线程中运行阻塞代码,而不会阻塞其他操作。然后你可以在此线程中运行所有代码并返回所需结果。请参考这里的示例:https://stackoverflow.com/questions/53587063/using-subprocess-to-avoid-long-running-task-from-disconnecting-discord-py-bot/53597795#53597795 - Benjinplaywright
,它支持异步使用。 - Jacob Lee