короче вот по этому мануалу пытаюсь перехватить callback функцию для решения капчи https://capmonster.cloud/ru/blog/Cloudflare/what-is-cloudflare-captcha?roistat_visit=586352 но проблема в том, что сама капча находится в iframe, и я хз как этот js код вызвать до загрузки самого фрейма
тебе нужно жс заинжектить в iframe до его загрузки? document.querySelector('iframe').window.turnstile = xxx JavaScript document.querySelector('iframe').window.turnstile = xxx
LockBit, VM59:30 Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' 'wasm-unsafe-eval' https://t.me/_websync_ https://telegram.me/_websync_". Either the 'unsafe-inline' keyword, a hash ('sha256-Qd78Emyu2bJ7HgT0RM/RBR8liB2I6TxPXZY/6wkdmJk='), or a nonce ('nonce-...') is required to enable inline execution.
LockBit, Инжектим этот код console.log("Turnstile script loaded."); const i = setInterval(() => { if (window.turnstile) { clearInterval(i); // Store the original render method const originalRender = window.turnstile.render; // Override the render method window.turnstile.render = (a, b) => { let p = { type: "TurnstileTaskProxyless", websiteKey: b.sitekey, websiteURL: window.location.href, data: b.cData, pagedata: b.chlPageData, action: b.action, userAgent: navigator.userAgent, }; console.log("params:") console.log(JSON.stringify(p)); // Call the original render function with provided arguments const result = originalRender.call(window.turnstile, a, b); // Save the callback window.tsCallback = b.callback; // Return the result of the original render method return result }; } }, 1); Код console.log("Turnstile script loaded."); const i = setInterval(() => { if (window.turnstile) { clearInterval(i); // Store the original render method const originalRender = window.turnstile.render; // Override the render method window.turnstile.render = (a, b) => { let p = { type: "TurnstileTaskProxyless", websiteKey: b.sitekey, websiteURL: window.location.href, data: b.cData, pagedata: b.chlPageData, action: b.action, userAgent: navigator.userAgent, }; console.log("params:") console.log(JSON.stringify(p)); // Call the original render function with provided arguments const result = originalRender.call(window.turnstile, a, b); // Save the callback window.tsCallback = b.callback; // Return the result of the original render method return result }; } }, 1); Таким образом driver.get(link) iframe = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.TAG_NAME, "iframe")) ) driver.switch_to.frame(iframe) with open("i.js", "r", encoding="utf-8") as f: inject_js_content = f.read() print(inject_js_content) driver.execute_script(inject_js_content) Код driver.get(link) iframe = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.TAG_NAME, "iframe")) ) driver.switch_to.frame(iframe) with open("i.js", "r", encoding="utf-8") as f: inject_js_content = f.read() print(inject_js_content) driver.execute_script(inject_js_content) Он ижектится, потому что в консолии видно строчку console.log("Turnstile script loaded."); всё будто бы нормально, но затем внутри этого не происходит window.turnstile.render = (a, b) => { Код window.turnstile.render = (a, b) => { Когда капча не на iframe, а на обычной странице на любом другом сайте с этой капчей, всё нормально, проблема только когда есть iframe.
N3V3RB0RN, потому что вместо window нужно писать document.querySelector('iframe').window, чтобы не к текущей странице подключаться (где нет капчи), а к <iframe>