So umgehen Sie Hcaptcha mit Python SelenPython

Python-Programme
Anonymous
 So umgehen Sie Hcaptcha mit Python Selen

Post by Anonymous »

Ich versuche, einen Prozess auf einer Website zu automatisieren, auf der HCAPTCHA verwendet wird, indem die Captcha über eine externe API (Solvecaptcha) gelöst und das Token mit Seleniumbase in die Seite injiziert. Die API gibt erfolgreich ein Token und ein Benutzeragent zurück, aber das Einstellen des Tokens in der HTML scheint die Captcha nicht als gelöst zu markieren, und die Formulierung der Form ist fehl. Ich habe versucht, das Token in den Feldern H-Captcha-Response und G-Recaptcha-Response sowie des Data-Hcaptcha-Response -attributs des HCaptcha-Iframe festzulegen, aber es funktioniert immer noch nicht. Solvecaptcha API, um das Token zu bekommen. Ich habe auch die relevante HTML für den HCaptcha Iframe aufgenommen.

Code: Select all

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>
Relevantes HTML
Wenn ich das HCaptcha manuell löste, sehe ich das Token im Data-Hcaptcha-Response-Attribut des IFrame: < /p>


Was ich ausprobiert habe

Einstellen des Tokens: Ich setze das Token in H-Captcha-Response und G-Recaptcha-Response Fields mit sb.execute_script

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post