如何使用量角器正确通过reCaptcha系统

时间:2018-11-14 15:38:58

标签: protractor recaptcha

为了验证包含reCaptcha的应用程序,我编写了一个简单的函数,如下所示:

it('And I validate the captcha.', function () {

        registration.clickOnCaptcha();

});

clickOnCaptcha()看起来像这样:

this.clickOnCaptcha = function() {

    // Switch to the iFrame where the captcha is
    browser.driver.switchTo().frame(0);

    // Disable waitForAngular since the iFrame is not in Angular
    browser.waitForAngularEnabled(false);

    browser.element(by.id('recaptcha-anchor')).click();

    // Dirty way to allow Captcha animation to finish
    browser.sleep('3000');

    // Enable waitForAngular before going back to the main frame
    browser.waitForAngularEnabled(true);

    // Switch back to the main frame
    browser.switchTo().defaultContent();
};

我想知道你们中的一些人是否找到了更好的方法?

此外,我想知道禁用waitForAngular函数的最佳方法是在之前之后切换到iFrame。

非常感谢。

2 个答案:

答案 0 :(得分:0)

这是我用于reCaptcha的代码

let recaptcha = $(iframeString); //String is previously built depending on page I am on
await browser.wait(until.visibilityOf(recaptcha),browser.params.longWait);
await util.scrollTo(recaptcha); //Sometime reCaptcha is out of view. This function brings it into view
let elem = await browser.driver.findElement(by.css(iframeString));
await browser.waitForAngularEnabled(false);
await browser.switchTo().frame(elem);
await $('#recaptcha-anchor').click();
await browser.switchTo().defaultContent();
await browser.waitForAngularEnabled(true);
await browser.sleep(1500); // Waiting for the reCAPTCHA to load

这与您的操作非常相似。我建议切换到特定的reCaptcha框架而不是frame(0),但这是我所能看到的最大改进。

答案 1 :(得分:0)

您可以将{1: 0.15000000000000002, 2: 0.25, 5: 0.1, 3: 0.25, 6: 0.15000000000000002, 4: 0.0} 替换为

browser.sleep('3000');

await browser.wait( async () => (await element(by.css("#recaptcha-accessible-status")).getAttribute("textContent")) === "You are verified" ); 是一个隐藏字段,在验证码验证后会更改文本。