python-3.x Selenium和asyncio

lhcgjxsq  于 2023-06-07  发布在  Python
关注(0)|答案(1)|浏览(224)

什么是最好的方式去做这项工作?由于Selenium不能很好地与asyncio一起工作,机器人最终会死亡。它按预期工作,但最终会崩溃。我确实明白问题是什么,特别是 selenium 是如此之重,但有没有一个好的工作围绕?
我得到错误消息:任务已销毁,但仍处于挂起状态!
我没有其他线索了,无法追踪。我必须重新启动机器人(不和谐),它会再次工作了一段时间。

  1. @bot.command(pass_context=True)
  2. async def weather(ctx, arg):
  3. if ctx:
  4. list = ('lf','oahu')
  5. await bot.say('*Loading webdriver.....*')
  6. if arg in list:
  7. if arg == 'lf':
  8. website = '--'
  9. name = 'Los Feliz Map'
  10. if arg == 'oahu':
  11. website = '--'
  12. name = 'Oahu Map'
  13. load_site = webdriver.Chrome()
  14. # load site on chrome
  15. load_site.get(website)
  16. await bot.say('*Loading ' + str(name) + '...*')
  17. load_site.find_element_by_xpath('//*[@id="main-map"]/div[2]/div[1]/div/a[2]').click()
  18. load_site.find_element_by_xpath('//*[@id="main-map"]/div[2]/div[2]').click()
  19. load_site.find_element_by_xpath('//*[@id="main-map"]/div[2]/div[2]/div/form/div[3]/label[6]/div/span').click()
  20. await asyncio.sleep(2) #sleep to ensure weather loads on site before screenshot
  21. load_site.save_screenshot('weather.png')
  22. await bot.say('*Taking screenshot and saving image....*')
  23. await bot.send_file(ctx.message.channel, 'weather.png')
  24. load_site.quit()
  25. print('Succesfully sent image of ' + str(arg) + ' - ' + str(ctx.message.author.name))

我把这个网站删掉了,因为这是一个私人网站。

enxuqcxy

enxuqcxy1#

简短回答:这不可能。如果你设法让它工作,它不会工作得很好。
长回答:Selenium是一个阻塞的API,你不能在异步脚本中使用它。如果你真的想使用网络浏览器,你可以尝试找到一个替代品,如https://pypi.org/project/aioselenium/

相关问题