Я пытаюсь решить рекапчу v2 с обратным вызовом, рекапча — это решение картинок. Я не совсем уверен, в чем моя проблема, потому что рекапча попадает ко мне только тогда, когда я нахожусь в безголовом режиме.
Я успешно извлекаю обратный вызов и отправляю решение. Когда это произойдет, веб-страница перейдет на следующую страницу. Но окно капчи все еще открыто. Я изо всех сил пытаюсь нажать кнопку «Проверить». Я пробую различные методы для переключения на iframe, но кнопка «Проверить» не найдена. Использую ли я XPath, CSS и т. д.
Могут ли кто-нибудь поможет понять, где я ошибаюсь?
def solve_recaptcha(api_key, site_key, url):
print(f"Sending sitekey to 2Captcha: {site_key}")
# Send the sitekey to 2Captcha for solving
response = requests.post(
'http://2captcha.com/in.php',
data={
'key': api_key,
'method': 'userrecaptcha',
'googlekey': site_key,
'pageurl': url
}
)
print(f"2Captcha response: {response.text}")
if response.text.startswith('OK|'):
captcha_id = response.text.split('|')[1]
else:
raise Exception(f"Error from 2Captcha: {response.text}")
# Retrieve the CAPTCHA solution
while True:
time.sleep(5)
result = requests.get(f'http://2captcha.com/res.php?key={api_ke ... captcha_id}')
if result.text == 'CAPCHA_NOT_READY':
continue
if result.text.startswith('OK|'):
captcha_solution = result.text.split('|')[1]
break
else:
raise Exception(f"Error from 2Captcha: {result.text}")
print(f"CAPTCHA Solution: {captcha_solution}")
return captcha_solution
try:
# JavaScript function to find reCAPTCHA clients
find_recaptcha_clients_js = """
function findRecaptchaClients() {
if (typeof (___grecaptcha_cfg) !== 'undefined') {
return Object.entries(___grecaptcha_cfg.clients).map(([cid, client]) => {
const data = { id: cid, version: cid >= 10000 ? 'V3' : 'V2' };
const objects = Object.entries(client).filter(([_, value]) => value && typeof value === 'object');
objects.forEach(([toplevelKey, toplevel]) => {
const found = Object.entries(toplevel).find(([_, value]) => (
value && typeof value === 'object' && 'sitekey' in value && 'size' in value
));
if (typeof toplevel === 'object' && toplevel instanceof HTMLElement && toplevel['tagName'] === 'DIV'){
data.pageurl = toplevel.baseURI;
}
if (found) {
const [sublevelKey, sublevel] = found;
data.sitekey = sublevel.sitekey;
const callbackKey = data.version === 'V2' ? 'callback' : 'promise-callback';
const callback = sublevel[callbackKey];
if (!callback) {
data.callback = null;
data.function = null;
} else {
data.function = callback;
const keys = [cid, toplevelKey, sublevelKey, callbackKey].map((key) => `['${key}']`).join('');
data.callback = `___grecaptcha_cfg.clients${keys}`;
}
}
});
return data;
});
}
return [];
}
return findRecaptchaClients();
"""
# Execute the JavaScript function to get reCAPTCHA clients data
recaptcha_data = driver.execute_script(find_recaptcha_clients_js)
print(f"reCAPTCHA Data: {recaptcha_data}")
if recaptcha_data:
# Assuming the first reCAPTCHA client found is the target
recaptcha_info = recaptcha_data[0]
site_key = recaptcha_info['sitekey']
callback_function = recaptcha_info.get('callback')
# Solve the reCAPTCHA
captcha_solution = solve_recaptcha(api_key, site_key, url)
# Inject the solved token into the page
driver.execute_script(f"document.getElementById('g-recaptcha-response').innerHTML='{captcha_solution}';")
# Execute the callback function if it exists
if callback_function:
driver.execute_script(f"var callback = {callback_function}; callback('{captcha_solution}');")
print("CAPTCHA solved and token submitted successfully.")
else:
print("No reCAPTCHA found on the page.")
except Exception as e:
print(f"Error: {e}")
Я прилагаю несколько фотографий, чтобы показать, как страница продвигается после отправки решения [введите описание изображения здесь] (https://i.sstatic.net/TpprM7PJ.png)
Как видите, страница продвигается после отправки решения, но iframe, содержащий капчу, все еще присутствует.
Переключение на iframe с помощью
driver.switch_to.frame(0)
wait = WebDriverWait(driver, 10)
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "[id*='verify']")))
# Click the button
button.click()
print("Button clicked successfully!")
Подробнее здесь: https://stackoverflow.com/questions/785 ... tcha-solve
Обратный вызов Recaptcha v2 – борьба с решением 2Captcha ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Обход reCaptcha v2 с помощью 2captcha API не работает на некоторых веб-сайтах
Anonymous » » в форуме C# - 0 Ответы
- 33 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Обход reCaptcha v2 с помощью 2captcha API не работает на некоторых веб-сайтах
Anonymous » » в форуме C# - 0 Ответы
- 36 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Проекты Selenium и 2captcha столкнулись с проблемой «g-recaptcha-response»
Anonymous » » в форуме Python - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-