Как нажать кнопку в Iframe с помощью кукловода? - PullRequest
1 голос
/ 30 марта 2020

Я новичок в кукловоде, поэтому не знаю много об этом. Пока это мой код, и все работает.

Но я хочу, чтобы он щелкнул кнопку входа в систему на странице после того, как он поместил текст в поля, но я не могу понять, как это сделать на всю жизнь меня. Я пробовал много разных вещей, и ни одна из них не работает. Любая помощь с этим была бы потрясающей.

, только если она вам нужна https://server.nitrado.net/usa/rent-gameserver


(async () => {
  console.log('launch browser');
  const browser = await pup.launch({headless: false});

  console.log('new page');
  const page = await browser.newPage();

  console.log('goto');
  await page.setViewport({ width: 1920, height: 1080 });
  await page.goto('https://server.nitrado.net/usa/rent-gameserver', { waitUntil: "networkidle2", timeout: 60000 });
  await page.waitFor(5000);
  console.log('extract login iframe');
  var iframes = await page.frames();
  var loginFrame = iframes.find(f => f.url().indexOf("oauth.nitrado.net") > -1);
  await page.waitFor(5000);
  console.log('evaluate iframe');
  await loginFrame.evaluate(() => {
    document.getElementById('username').value = 'test';
    document.getElementById('password').value = '12345';
  });
  await page.waitFor(300000);

  console.log('done');
  await browser.close();
})()```

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

это мой код при запуске выше


const pup = require('puppeteer');

(async () => {
  console.log('launch browser');
  const browser = await pup.launch({headless: false});

   //SELECTORS:
   var userInputSel = '#username';
   var passInputSel = '#password';
   var loginBtnSel = '#auth_login_ws_header > form > button';
   var myUser = "Nastygamenation"; //PUT YOUR USERNAME HERE!!!
   var myPass = "test"; //PUT YOUR PASSWORD HERE!!!

  console.log('new page');
  const page = await browser.newPage();

  console.log('goto');
  await page.setViewport({ width: 1920, height: 1080 });
  await page.goto('https://server.nitrado.net/usa/rent-gameserver', { waitUntil: "networkidle2", timeout: 60000 });
  await page.waitFor(5000);
  console.log('extract login iframe');
  var iframes = await page.frames();
  var loginFrame = iframes.find(f => f.url().indexOf("oauth.nitrado.net") > -1);
  await page.waitFor(5000);
  console.log('evaluate iframe');
  /*await loginFrame.evaluate(() => {
    document.getElementById('username').value = 'Nastygamenation';
    document.getElementById('password').value = 'test';
  });*/
  await page.waitFor(7000);
  console.log('Logged in > going to logs');
  await page.waitForSelector(userInputSel);
  await page.type(userInputSel, myUser);
  await page.waitForSelector(passInputSel);
  await page.type(passInputSel, myPass);
  await page.waitForSelector(loginBtnSel);
  await page.click(loginBtnSel);
  await page.waitFor(300000);
  console.log('done');
  await browser.close();
})()

с ошибкой

  throw err;
  ^

Error: Cannot find module 'C:\Users\logan\Desktop\GamerBot\test.js'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:982:15)
    at Function.Module._load (internal/modules/cjs/loader.js:864:27)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at internal/main/run_main_module.js:18:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}```
0 голосов
/ 30 марта 2020

Я попытался обойти ввод URL-адреса фрейма, я не уверен, поможет ли это, но здесь идет код (основной. js):

const pup = require('puppeteer');

mainFunc = async function () {
  return new Promise(async (resolve, reject) => { //Wrap de promise
    var browser;
    try {
         //Wrap de tratamento de erros
        const browser = await pup.launch({ headless: false });

        const page = await browser.newPage();
        //SELECTORS:
        var userInputSel = '#username';
        var passInputSel = '#password';
        var loginBtnSel = '#auth_login_ws_header > form > button';
        var myUser = "myusername"; //PUT YOUR USERNAME HERE!!!
        var myPass = "MyPaSsWoRd123"; //PUT YOUR PASSWORD HERE!!!

        await page.goto('https://server.nitrado.net/usa/rent-gameserver', { waitUntil: "networkidle2", timeout: 60000 });

        await page.waitFor(5000);
        console.log('extract login iframe');
        var iframes = await page.frames();
        var loginFrame = iframes.find(f => f.url().indexOf("oauth.nitrado.net") > -1);
        console.log(loginFrame.url())
        await page.goto(loginFrame.url(), { waitUntil: "networkidle2", timeout: 60000 });
        await page.waitFor(5000);
        console.log('evaluate iframe');
        /*await loginFrame.evaluate(() => {
          document.getElementById('username').value = 'test';
          document.getElementById('password').value = '12345';
        });*/
        await page.waitForSelector(userInputSel);
        await page.type(userInputSel, myUser);
        await page.waitForSelector(passInputSel);
        await page.type(passInputSel, myPass);
        await page.waitForSelector(loginBtnSel);
        await page.click(loginBtnSel);

        await page.waitFor(300000);

        console.log('done');
        await browser.close();


    } catch (e) { 
      if(browser!=undefined){
        browser.close();//Close browser if error
      }
      return reject(e);
    }
  });//Wrap de promise
}

mainFunc();

Это работающая версия для Вы, чтобы проверить. Просто введите «узел основной». (конечно, вам нужен кукловод (npm я кукловод)) ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...