Java Selenium + 2Captcha + отправить форму

Здравствуйте, я пытаюсь автоматизировать некоторый процесс здесь . я использую 2captch для решения капчи, пожалуйста, проверьте изображение.

У меня есть site_key и api_key , теперь я отправляю api_key + site_key, и он возвращает мне response_token, я добавил возвращенный токен ответа в g-recaptcha-response, но он не отправляет форму.

то, что я хочу, это то, что: я могу решить капчу и отправить форму.

Вот мой текущий код Java:

 System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
    ChromeDriver driver;
    driver = new ChromeDriver();
    driver.manage().deleteAllCookies();
    driver.manage().window().maximize();
    driver.get("https://id.sonyentertainmentnetwork.com/signin/?client_id=fe1fdbfa-f1a1-47ac-b793-e648fba25e86&redirect_uri=https://secure.eu.playstation.com/psnauth/PSNOAUTHResponse/pdc/&service_entity=urn:service-entity:psn&response_type=code&scope=psn:s2s&ui=pr&service_logo=ps&request_locale=en_GB&error=login_required&error_code=4165&error_description=User+is+not+authenticated&no_captcha=false#/signin?entry=%2Fsignin");
    Thread.sleep(5000);

    driver.findElement(By.xpath("//input[@title='Sign-In ID (Email Address)']")).sendKeys("email");
    Thread.sleep(2000);
    driver.findElement(By.xpath("//input[@title='Password']")).sendKeys("password");
    Thread.sleep(2000);
    driver.findElement(By.xpath("//button[@class='primary-button row-button text-button touch-feedback']")).click();
    Thread.sleep(3000);
    By captcha = By.xpath("//iframe[@title='recaptcha challenge']");
    String src = driver.findElement(captcha).getAttribute("src");
    String key = getKey(src);
    System.out.println(key);

    String apiKey = "API_KEY";
    String googleKey = key;
    String pageUrl = "https://id.sonyentertainmentnetwork.com/signin/?client_id=fe1fdbfa-f1a1-47ac-b793-e648fba25e86&redirect_uri=https://secure.eu.playstation.com/psnauth/PSNOAUTHResponse/pdc/&service_entity=urn:service-entity:psn&response_type=code&scope=psn:s2s&ui=pr&service_logo=ps&request_locale=en_GB&error=login_required&error_code=4165&error_description=User+is+not+authenticated&no_captcha=false#/signin?entry=%2Fsignin";
    String proxyIp = "183.38.231.131";
    String proxyPort = "8888";
    String proxyUser = "username";
    String proxyPw = "password";


    TwoCaptchaService service = new TwoCaptchaService(apiKey, googleKey, pageUrl, proxyIp, proxyPort, proxyUser, proxyPw, ProxyType.HTTP);

    try {
        String responseToken = service.solveCaptcha();
        System.out.println("The response token is: " + responseToken);
        JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("document.getElementById(\"g-recaptcha-response\").innerHTML = \'"+responseToken+"\';");
    } catch (InterruptedException e) {
        System.out.println("ERROR case 1");
        e.printStackTrace();
    } catch (IOException e) {
        System.out.println("ERROR case 2");
        e.printStackTrace();
    }

ОБНОВЛЕННЫЙ КОД:

          js.executeScript("document.getElementById(\"g-recaptcha-response\").innerHTML = \'" + responseToken + "\';");
        Thread.sleep(500);
        WebElement frameElement = driver.findElement(captcha);
        driver.switchTo().frame(frameElement);         
        js.executeScript("document.getElementById('recaptcha-verify-button').click();");

он нажимает на кнопку, но показывает Please select all matching images. . посмотрите скриншот


person Joy    schedule 17.09.2019    source источник
comment
Вам нужно щелкнуть что-нибудь, чтобы отправить форму. Я не могу сказать, что это такое, потому что сайт хочет, чтобы я вошел в систему.   -  person pguardiario    schedule 18.09.2019
comment
если я нажму кнопку входа, он снова откроет окно с капчей и попросит меня выбрать изображения ...   -  person Joy    schedule 18.09.2019
comment
@pguardiario, вы можете попробовать войти в систему с помощью этой пробной учетной записи. eamil = [email protected] pass = 131313aa. я надеюсь, что вы можете помочь мне   -  person Joy    schedule 18.09.2019
comment
@Awais, проверь мой ответ, все, что ты сделал, хорошо, но ты забыл его отправить   -  person Ahmet Aziz Beşli    schedule 18.09.2019
comment
@Awais У меня не получилось, но завтра я попробую что-нибудь еще. Если вы это сделали, пожалуйста, предупредите меня.   -  person Ahmet Aziz Beşli    schedule 18.09.2019


Ответы (1)


Все, что вам нужно сделать, это отправить его следующим образом:

js.executeScript("document.getElementById('g-recaptcha-response').innerHTML='" + responseToken + "';");
Thread.sleep(500);
js.executeScript("document.getElementById('captcha-form').submit();");

также не забудьте проверить этот идентификатор: "капча-форма", он может быть другим

Чтобы перейти к элементу «recaptcha-verify-button»:

После того, как вы получили ответ от API;

By frame = By.xpath("//iframe[@title='recaptcha challenge']");

WebElement frameElement = driver.findElement(frame);

driver.switchTo.frame(frameElement);

то вы можете выполнить свой скрипт. Наконец, для вашего скрипта, если ваша капча-форма представляет собой кнопку

ты

не могу вызвать submit();

ты

можно вызвать click();

Окончательный ответ:

Также проверьте это: js.executeScript("widgetVerified('TOKEN');");

Чтобы найти функцию с именем widgetVerified(), запустите этот код в консоли.

___grecaptcha_cfg.clients[0]

это вернет json, внутри этого json попытайтесь найти функцию обратного вызова в случае @Awais, это было wigdetVerified(e)

Предупреждение: не используйте блокировщики рекламы

person Ahmet Aziz Beşli    schedule 18.09.2019
comment
Я очень ценю ваши усилия, я пробовал это 'recaptcha-verify-button', но оно говорит: Exception in thread "main" org.openqa.selenium.JavascriptException: javascript error: Cannot read property 'submit' of null. вот скриншот: ibb.co/KWQ0w8M - person Joy; 18.09.2019
comment
@Awais, чтобы иметь возможность добраться до этого элемента, вам сначала нужно переключиться на фрейм, я отредактирую свой ответ, пожалуйста, проверьте его. - person Ahmet Aziz Beşli; 18.09.2019
comment
Азиз Бесли, спасибо, я обновил свой вопрос, не могли бы вы проверить его: он показывает это Please select all matching images., когда скрипт нажимает кнопку. - person Joy; 18.09.2019
comment
@Awais, должна быть форма для отправки. Но я не смог найти его в исходном коде. Я думаю в этой версии капчи немного по другому - person Ahmet Aziz Beşli; 18.09.2019
comment
я проверял функцию обратного вызова, пожалуйста, посмотрите на этот скриншот: ibb.co/Mhj7syM, возможно, вы можете получить некоторую подсказку , как вы лучше меня знаете, как это вообще все работает... - person Joy; 18.09.2019
comment
@Awais, вы можете проверить это после того, как получите ответ от сервера: js.executeScript(widgetVerified('TOKEN'); ); - person Ahmet Aziz Beşli; 18.09.2019
comment
не повезло :( Exception in thread "main" org.openqa.selenium.JavascriptException: javascript error: widgetVerified is not defined - person Joy; 18.09.2019
comment
@Awais, вам нужно переключиться на содержимое по умолчанию: driver.switchTo().defaultContent(); затем запустите этот скрипт js.executeScript(widgetVerified('token');); или просто удалите функцию switchToFrame() и попробуйте запустить ее - person Ahmet Aziz Beşli; 18.09.2019
comment
большое спасибо, вы помогли мне дважды ... да благословит вас Аллах брат - person Joy; 18.09.2019