""" dl.formRow:nth-child(3) > dd:nth-child(2) > div:nth-child(1)
iframe[data-hcaptcha-widget-id="0dm47zf0gn8t"] textarea[id="g-recaptcha-response-0dm47zf0gn8t"] textarea[id="h-captcha-response-0dm47zf0gn8t"] """ import asyncio import logging from .base import Captcha, Page logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) logger.addHandler(logging.StreamHandler()) class SolverHCaptcha(Captcha): ctype = "hcaptcha" async def solve(self, selector, page: Page): # проверка что элемент с капчей есть div_container = page.locator(selector) await div_container.wait_for() # поиск данных и элементов site_key = await div_container.get_attribute("data-sitekey") is_invisible = bool(await div_container.get_attribute("data-invisible")) iframe = div_container.locator("iframe:nth-child(1)") await iframe.wait_for() textarea_id_postfix = await iframe.get_attribute("data-hcaptcha-widget-id") textarea_g = await page.query_selector(f"#g-recaptcha-response-{textarea_id_postfix}") textarea_h = await page.query_selector(f"#h-captcha-response-{textarea_id_postfix}") # решение code = await self.hcaptcha(page.url, site_key, is_invisible) # подстановка решения await textarea_g.evaluate(( "(el, value) => {" "el.value = value;" "el.dispatchEvent(new Event('input', {bubbles: true}));" "}" ), code) await textarea_h.evaluate(( "(el, value) => {" "el.value = value;" "el.dispatchEvent(new Event('input', {bubbles: true}));" "}" ), code) return code