什么是最好的方式去做这项工作?由于Selenium不能很好地与asyncio一起工作,机器人最终会死亡。它按预期工作,但最终会崩溃。我确实明白问题是什么,特别是 selenium 是如此之重,但有没有一个好的工作围绕?
我得到错误消息:任务已销毁,但仍处于挂起状态!
我没有其他线索了,无法追踪。我必须重新启动机器人(不和谐),它会再次工作了一段时间。
@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))
我把这个网站删掉了,因为这是一个私人网站。
1条答案
按热度按时间enxuqcxy1#
简短回答:这不可能。如果你设法让它工作,它不会工作得很好。
长回答:Selenium是一个阻塞的API,你不能在异步脚本中使用它。如果你真的想使用网络浏览器,你可以尝试找到一个替代品,如https://pypi.org/project/aioselenium/。