Это баг playwright ил нет?

Я пишу код драматурга на python:

from playwright.async_api import async_playwright
import asyncio
from core.pp_def import auth, get_fight, class_gender, path_pokebol, shine, catch_gender, fights

login = '********'
password = '********'
catch = '#052 Мяут'
gender = 'Мужской'
pokebol = 'Ультрабол'
proxy = ''
fight = 3
heal = ''
item = ''
item_val = ''
log = ''


async def main(login, password, proxy, fight, heal, item, item_val, catch, gender, pokebol, log):
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=False, channel='chrome',
                                          executable_path='C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
                                          args=['--window-size'],
                                          slow_mo=3)
        context = await browser.new_context(viewport={'width': 1366, 'height': 768})
        page = await context.new_page()
        await auth(page, login, password)
        if fight == 'Отсутствует' or fight < 0:
            fight = 750
        elif fight > 1500:
            fight = 1500
        f = 1
        flag = False
        gender = await class_gender(gender)
        path = await path_pokebol(pokebol)
        await page.click('//div[@class="Button NoActive" and @onclick="PP.fight.setHunt(this);"]')
        while True:
            await page.wait_for_selector('.Battle')
            namepok, gendcat = await get_fight(page)
            f = await shine(page, namepok, f)
            if not gender == 'Отсутствует':
                flag, f = await catch_gender(page, catch, namepok, gender, gendcat, path, f)
                if flag:
                    continue
            elif not flag:
                await fights(page)
                f += 1
                if f <= fight:
                    continue
                else:
                    break


if __name__ in '__main__':
    asyncio.run(main(login, password, proxy, fight, heal, item, item_val, catch, gender, pokebol, log))

Я использую динамически обновляемую страницу, на странице все условия соответствуют моим ожиданиям относительно рабочего кода.

Все функции:

from core.data.dictionary import id_pokebols, genderly

f = 1


async def auth(page, login, password):
    await page.goto('https://*******')
    await page.click('.Auth')
    await page.type('#authLogin', login, delay=10)
    await page.type('#authPassword', password, delay=10)
    await page.press('#authPassword', 'Enter')
    await page.click('.BtnAuth')


async def get_fight(page):
    namepok = await page.locator('//*[@id="battleMap"]/div/div[4]/div[2]/div[2]/div[1]').text_content()
    gendcat = await page.locator('//*[@id="battleMap"]/div/div[4]/div[2]/div[2]/div[2]/i').get_attribute('class')
    return namepok, gendcat



async def class_gender(gender):
    if gender.lower() in genderly:
        gender = genderly[gender.lower()]
        return gender


async def path_pokebol(pokebol):
    if not pokebol == 'Отсутствует':
        path = f"//img[@src='/img/world/items/small/{id_pokebols[pokebol.lower()]}.png']"
        return path
    else:
        path = "//img[@src='/img/world/items/small/3.png']"
        return path


async def shine(page, namepok, ft):
    if await page.is_visible(
            "//*[@id='battleMap']/div/div[4]/div[1]/div[@class='pok1-color namePokemon Name __name']"):
        await page.click("//*[@id='battleMap']/div/div[4]/div[3]/div[3]/div[2]/i")
        if await page.is_visible("//img[@src='/img/world/items/small/109.png']"):
            await page.click("//img[@src='/img/world/items/small/109.png']")
            print('Шайни', namepok, 'пойман!')
            ft += 1
            return ft
        else:
            return ft
    else:
        return ft


async def catch_gender(page, catch, namepok, gender, gendcat, path, ft):
    if gender == gendcat and catch.lower() == namepok.lower():
        await page.click("//*[@id='battleMap']/div/div[4]/div[3]/div[3]/div[2]/i")
        if await page.is_visible(path):
            await page.click(path)
            flag = True
            ft += 1
            return flag, ft
        else:
            flag = True
            return flag, ft
    else:
        flag = False
        return flag, ft


async def fights(page):
    await page.click(
        "//div[@class=' Move']//div[@class='Name MoveCategory1' or @class='Name MoveCategory2']")

Я попытался проверить свой код с помощью методов print (да да, по нубски и слишком банально) и получил на выходе зацикленный вывод функции catch_gender, т.е. код дальше не работает, функция fights не работает, это все, что я получил. Я искал решения в Интернете, я обратился к ChatGPT, но я не нашел четкого ответа и решения, пожалуйста, помогите. Может быть, это ошибка или я чего-то еще не понимаю?

p.s. во время выполнения кода, до того, как fights начнет работать, контекст страницы не меняется. А так же использую Windows 8.1 single language и PyCharm, браузеры из пакета playwright не работают, поэтому я использую Chrome. Я думаю, это тоже может быть проблемой.


Ответы (0 шт):