@oo22maxi

Как в PhantomJS выполнять сценарий во всех iframe?

Добрый вечер друзья. Подскажи пожалуйста как PhantomJS заставить выполнят скрипт, пытаюсь заставить фантом нажать на капчу recaptcha но не получается, если я правильно понял, то фантом игнорирует все фреймы. (Так ли это?)

Сам код
var webPage = require('webpage');
var page = webPage.create();

page.settings.userAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36",
page.viewportSize = { width: 1920, height: 1080 };

page.open('https://www.google.com/recaptcha/api2/demo', function (status) {
 
 console.log('Status: ' + status);

  window.setTimeout( function() {

       // Скрипт взят из расширения для chrome, работает замечательно. Там в файле manifest.json включена опция 
       // all_frames : true ( выполнять сценарий во всех фреймах, из за этого и подумал что он игнорирует фреймы)
       var isRecaptchaFrame = function() {
          return /https:\/\/www.google.com\/recaptcha\/api2\/anchor/.test(window.location.href);
        };

        var captchaInterval = setInterval(function() {
          if (isRecaptchaFrame()) {
            clearInterval(captchaInterval);
            document.getElementsByClassName('recaptcha-checkbox-checkmark')[0].click();
          }
        }, 500);
        // end

        window.setTimeout( function() {
            page.render('/screenshot.jpeg');
            phantom.exit();
        }, 2500);

  }, 5500);
});


Само расширение здесь.

Подскажите, как мне это реализовать, куда копать?

UPD: Рабочий код
var page = require('webpage').create();

page.settings.userAgent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 YaBrowser/17.11.1.1120 (beta) Yowser/2.5 Safari/537.36';
page.viewportSize = '1280x1024';

page.open('https://www.google.com/recaptcha/api2/demo', function (status) {
    if (status == 'success') {

        page.includeJs('https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js');

        isRecapha();

        window.setTimeout( function() {
            page.switchToMainFrame();
            page.render('/home/user/screenshot.jpeg');
            phantom.exit();
        }, 5000);

    };
});

function isRecapha()
{
    page.switchToFrame(0);

    window.setTimeout( function() {

        var step = page.evaluate(function() {

            var isRecaptchaFrame = function() {
              return /https:\/\/www.google.com\/recaptcha\/api2\/anchor/.test(window.location.href);
            };

            if (isRecaptchaFrame()) {
                document.getElementsByClassName('recaptcha-checkbox-checkmark')[0].click();
                return true;
            } else return false;

        });

    }, 1000);

}
  • Вопрос задан
  • 115 просмотров
Решения вопроса 1
@oo22maxi
Решил проблему используя
page.switchToFrame('framwName/framwPosition');
docs
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы