如何使用操纵up在iframe中单击按钮?

时间:2020-03-30 06:34:23

标签: javascript iframe puppeteer

我是puppeteer的新手,所以对此一无所知。到目前为止,这是我的代码,一切正常。

但是我希望它在将文本输入字段后单击页面上的登录按钮,但是我无法弄清楚该如何做。我尝试了许多不同的方法,但没有任何效果。任何帮助都会很棒。

以防万一您需要它 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 :(得分:0)

我尝试了一种输入框架网址的解决方法,不确定是否会有所帮助,但是代码(main.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();

这是一个正在运行的版本,供您测试。只需输入“ node main”。 (当然,您需要安装puppeteer(npm i puppeteer))...

答案 1 :(得分:0)

这是我在上面运行时的代码

self.a[2][0]

有错误

class A():
    def __init__(self):
        self.b = [1,1]
        self.c = [2,2]
        self.d = [3,3]
        self.a = [self.b, self.c, self.d]
        self.a[0] = self.c
        self.a[1] = self.d
        self.d[0] += 1
        print(self.a)

aaa = A()