Как обойти hcaptcha с помощью Python seleniumPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как обойти hcaptcha с помощью Python selenium

Сообщение Anonymous »

Я пытаюсь автоматизировать процесс на веб -сайте, который использует HCaptcha, решая CAPTCHA через внешний API (Solvecaptcha) и вводя токен в страницу с использованием селена. API успешно возвращает токен и пользовательский агент, но установление токена в HTML, похоже, не отмечает CAPTCHA как решенное, а подчинение формы не удается. Я попытался установить токен в полях h-captcha-response и g-recaptcha-response , а также атрибут данных hcaptcha iframe , но он все еще не работает. API, чтобы получить токен. Я также включил соответствующий HTML для Hcaptcha iframe.

Код: Выделить всё

import time
import json
import requests
from bs4 import BeautifulSoup
from seleniumbase import SB
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

API_KEY = "KEY"
PAGE_URL = "https://accounts.hcaptcha.com/demo"

def solve_hcaptcha(sitekey):
api_get_url = "https://api.solvecaptcha.com/res.php"
api_post_url = "https://api.solvecaptcha.com/in.php"

payload = {
'key': API_KEY,
'method': 'hcaptcha',
'sitekey': sitekey,
'pageurl': PAGE_URL,
'json': 1
}

res = requests.post(api_post_url, data=payload)
result: dict = res.json()

if result.get("status") != 1:
raise RuntimeError(f"Error sending request: {result.get('request')}")

captcha_id = result.get("request")
print("Received captcha_id:", captcha_id)

while True:
params = {
'key': API_KEY,
'action': 'get',
'id': captcha_id,
'json': 1
}

res = requests.get(api_get_url, params=params)
data: dict = res.json()

if data.get("status") == 1:
print("Captcha solved successfully!")
return data
elif data.get("request") == "CAPCHA_NOT_READY":
print("Captcha not ready yet, waiting 5 seconds...")
time.sleep(5)
else:
raise RuntimeError(f"Error retrieving solution: {data.get('request')}")

def set_captcha_token(sb, token: str):
sb.execute_script(
"document.querySelector(" + "'" + '[name="h-captcha-response"]' + "'" + ").innerHTML = " + "'" + token + "'")

sb.execute_script(
"document.querySelector(" + "'" + '[name="g-recaptcha-response"]' + "'" + ").innerHTML = " + "'"  + token + "'")

iframe = sb.find_element(By.CSS_SELECTOR, 'iframe[title="Widget containing checkbox for hCaptcha security challenge"]')
sb.execute_script("arguments[0].setAttribute('data-hcaptcha-response', arguments[1])", iframe, token)

def query_target_name(sb, first_name: str, middle_name: str, last_name: str):
sb.type("//input[@id='id1']", 'aaron', By.XPATH)
sb.type("//input[@id='ide']", 'marks', By.XPATH)
sb.type("//input[@id='idf']", 'daniel', By.XPATH)

sb.click("//input[@id='id3']", By.XPATH)

wait = WebDriverWait(sb.driver, 10)
wait.until(lambda driver: driver.current_url != PAGE_URL)

def main():
with SB(uc=True) as sb:
sb.uc_open_with_reconnect(PAGE_URL, 10)

try:
sitekey = sb.get_attribute("div.h-captcha", "data-sitekey")
print(f"Extracted sitekey: {sitekey}")
except Exception as e:
print(f"Failed to find element with data-sitekey: {e}")
return

try:
solution = solve_hcaptcha(sitekey)
token = solution.get("request")
user_agent = solution.get("useragent")

print("Token:", str(token))
print("User-Agent:", user_agent)

set_captcha_token(sb, str(token))
print("Token successfully inserted into the form fields.")

html = sb.get_page_source()
with open("myhtml.html", 'w', encoding="utf-8") as file:
file.write(html)

query_target_name(sb, "Aaron", "Daniel", "Marks")
print("Submitted target name to input box and pressed search")

res = scrap_data_from_source(sb.get_page_source())
print(res)

time.sleep(10)
except Exception as e:
print(f"Failed to solve the captcha: {e}")
return

if __name__ == "__main__":
main()
< /code>
Соответствующий html
Когда я решаю hcaptcha вручную, я вижу токен в атрибуте Data-hcaptcha-response of iframe: < /p>



Подробнее здесь: [url]https://stackoverflow.com/questions/79700966/how-to-bypass-hcaptcha-using-python-selenium[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»