python-3.x Selenium和asyncio

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

什么是最好的方式去做这项工作?由于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))

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

enxuqcxy

enxuqcxy1#

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

相关问题