Это баг 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. Я думаю, это тоже может быть проблемой.