Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 木偶演员:我怎样才能让浏览器对象分配给另一个变量而不被定义?_Javascript_Node.js_Puppeteer_Chromium - Fatal编程技术网

Javascript 木偶演员:我怎样才能让浏览器对象分配给另一个变量而不被定义?

Javascript 木偶演员:我怎样才能让浏览器对象分配给另一个变量而不被定义?,javascript,node.js,puppeteer,chromium,Javascript,Node.js,Puppeteer,Chromium,我一直在从事一个使用Puppeter打开浏览器页面的项目,我希望以后能够向同一个浏览器实例添加更多页面,因此我想知道返回浏览器对象的最佳方式是什么,或者将其分配给一组浏览器以存储它。总之,一旦我运行了浏览器,如果用户决定以后打开页面,我希望能够将页面作为新选项卡打开。你知道怎么做吗?提前谢谢 我的代码如下: index.js(主程序文件) *注意控制台.log(浏览器[1])在控制台中返回undefined,因此不会传递浏览器对象 cursorspunted.js(页面功能文件的示例) acti

我一直在从事一个使用Puppeter打开浏览器页面的项目,我希望以后能够向同一个浏览器实例添加更多页面,因此我想知道返回浏览器对象的最佳方式是什么,或者将其分配给一组浏览器以存储它。总之,一旦我运行了浏览器,如果用户决定以后打开页面,我希望能够将页面作为新选项卡打开。你知道怎么做吗?提前谢谢

我的代码如下: index.js(主程序文件)

*注意
控制台.log(浏览器[1])
在控制台中返回undefined,因此不会传递浏览器对象

cursorspunted.js(页面功能文件的示例)

actions.js(具有浏览器可以执行的操作)

我运行浏览器,如果用户决定以后打开页面,我希望能够以新选项卡的形式打开页面

你们提到页面,但你们甚至并没有在任何地方使用这个方法

如果要在选项卡中打开多个页面,下面是一个简单的示例:

const puppeter=require('puppeter');
(异步()=>{
const browser=wait puppeter.launch({headless:false});
常量页=[];
pages.push(等待browser.newPage());
pages.push(等待browser.newPage());
等待页面[0]。转到('0')https://google.com');
等待页面[0]。屏幕截图({path:'google.png'});
等待第[1]页。转到('https://github.com/puppeteer/puppeteer');
等待页面[1]。屏幕截图({path:'puppeter.png'});
等待浏览器关闭();
})();

这与Puppeter的github页面的入门部分中的示例非常相似。

感谢@pavelsaman的回复,我确实有这些页面,让我更新代码以显示我的所有文件。好的,您正在函数
runPage()
中打开新页面,该函数定义了其中的数组
page
,因此,您在函数之外无法访问它。
let browsers = [];
async function runBrowser(pageID,browserID) {
    const browser = await puppeteer.launch({
        "headless": false,
        "defaultViewport": null,
        "args": ['--start-maximized'],
        //"userDataDir": FULLPATH,
    });
    success = true;
    browsers[browserID] = browser;
//CHANGE THE PAGE THAT OPENS
    switch(pageID){
        case 0:
        login.openCursosPuntoD(browser);
        break;
        case 1:
        facebook.openFacebookPuntoD(browser);
        break;
        case 2:
        instagram.openInstagramPuntoD(browser);
        break;
        case 3:
        twitter.openTwitterPuntoD(browser);
        break;
        case 4:
        youTube.openYouTubePuntoD(browser);
        break;
        case 5:
        webPage.openPaginaWebPuntoD(browser);
        break;
        default:
        break;
    }
};
runBrowser(1,1);
//HERE ONCE I RUN THE BROWSER I WANT TO BE ABLE TO OPEN PAGES AS NEW TABS IN IT LATER ON IF THE USER DECIDES TO
console.log(browsers[1]);
function openCursosPuntoD(browser){
actions.runPage('https://xxxxx.org/login/index.php',true,browser);
};
module.exports = {
    openCursosPuntoD,
};
//FUNCTION TO OPEN PAGES
async function runPage(url,doLogin,browser){
    const page = [];
    const pageNumber = (await browser.pages()).length+1;
    page[pageNumber] = await browser.newPage();
    await page[pageNumber].goto(url);
      
if(doLogin == true){
    var user = getUsername();
    var pass = getPassword();
    login(user,pass,page[pageNumber]);
}
else{}
}

//FUNCTION TO GET USERNAME

function getUsername(){
    var content = fs.readFileSync('../data/user.txt','utf8');
    var result = JSON.parse(content);
    var username = result[Object.keys(result)[0]];
    return username;
}

//FUNCTION TO GET PASSWORD

function getPassword(){
    var content = fs.readFileSync('../data/user.txt','utf8');
    var result = JSON.parse(content);
    var password = result[Object.keys(result)[1]]
    return password;
}

async function login(user,pass,p){
    await p.type('#username', user);
    await p.type('#password', pass);
    await p.click('#loginbtn');
}