Node.js 重用浏览器实例puppeter

Node.js 重用浏览器实例puppeter,node.js,puppeteer,Node.js,Puppeteer,我想知道是否有可能有一个.js文件打开浏览器实例,创建新页面/选项卡登录到网站(使用用户名/密码)并保持空闲在第二个.js文件中,使用一个浏览器实例及其页面 1.js 2.js 您可以通过多种方式实现这一点,比如使用带有函数的单独模块或不同的类,这取决于您的特殊需要 您可以使用一个类来启动浏览器并创建页面以及一些额外的功能 //1.js const puppeter=require('puppeter'); 类爬虫{ 构造函数(){ //使用类中需要的任何值初始化 //或者,如果对象不是通过生成

我想知道是否有可能有一个.js文件打开浏览器实例,创建新页面/选项卡登录到网站(使用用户名/密码)并保持空闲
在第二个.js文件中,使用一个浏览器实例及其页面

1.js

2.js


您可以通过多种方式实现这一点,比如使用带有函数的单独模块或不同的类,这取决于您的特殊需要

您可以使用一个类来启动浏览器并创建页面以及一些额外的功能

//1.js
const puppeter=require('puppeter');
类爬虫{
构造函数(){
//使用类中需要的任何值初始化
//或者,如果对象不是通过生成创建的,则抛出错误
}
静态异步构建(){
让爬虫=新爬虫();
等待爬虫;
返回爬虫;
}
异步_init(){
//启动浏览器并保持其状态
此._browser=wait puppeter.launch({timeout:0});
//创建页面并保持其状态
此。_page=等待此。_browser.newPage();
}
//吸气剂
获取浏览器(){
返回此。\u浏览器;
}
//吸气剂
获取第()页{
返回此页;
}
异步登录(url){
等待此消息。\u page.goto(url);
//执行与登录过程相关的任何操作
}
}
module.exports={Crawler};
注意,构造函数中不能有异步函数。因为启动浏览器是异步的,所以在创建对象时,我们使用类似于
build
的函数来启动浏览器。然后我们创建如下爬虫对象:

//2.js
const{Crawler}=require('./1.js');
(异步()=>{
let crawler=等待crawler.build();
等待爬虫。登录(“https://example.com");
//访问爬虫页面
log(crawler.page.url());
})();
请记住,这只是一个示例,决不能代表最佳实践。因此,首先,您需要了解您希望通过这种封装实现什么,然后采用最适合您的方法


阅读有关JS类的更多信息

您可以通过多种方式实现这一点,比如使用带有函数的单独模块或不同的类,这取决于您的特殊需要

您可以使用一个类来启动浏览器并创建页面以及一些额外的功能

//1.js
const puppeter=require('puppeter');
类爬虫{
构造函数(){
//使用类中需要的任何值初始化
//或者,如果对象不是通过生成创建的,则抛出错误
}
静态异步构建(){
让爬虫=新爬虫();
等待爬虫;
返回爬虫;
}
异步_init(){
//启动浏览器并保持其状态
此._browser=wait puppeter.launch({timeout:0});
//创建页面并保持其状态
此。_page=等待此。_browser.newPage();
}
//吸气剂
获取浏览器(){
返回此。\u浏览器;
}
//吸气剂
获取第()页{
返回此页;
}
异步登录(url){
等待此消息。\u page.goto(url);
//执行与登录过程相关的任何操作
}
}
module.exports={Crawler};
注意,构造函数中不能有异步函数。因为启动浏览器是异步的,所以在创建对象时,我们使用类似于
build
的函数来启动浏览器。然后我们创建如下爬虫对象:

//2.js
const{Crawler}=require('./1.js');
(异步()=>{
let crawler=等待crawler.build();
等待爬虫。登录(“https://example.com");
//访问爬虫页面
log(crawler.page.url());
})();
请记住,这只是一个示例,决不能代表最佳实践。因此,首先,您需要了解您希望通过这种封装实现什么,然后采用最适合您的方法

阅读更多关于JS类的信息

爬虫对象保留浏览器实例的状态和 无论在何处调用/传递该实例,它都引用相同的实例 在“背景”中。如果这是一种过度的杀伤力,而你只是想 连接到一个已经运行的chromium使用木偶,你可以这样做 和木偶师联系。看看这个: –mbit

是的,我想这对我来说太过分了:)。但是你发布的链接是我想要的,但是有两个问题

这是我的样品

// 1.js
// open chromium, new tab, go to google.com, print browserWSEndpoint, disconnect
const puppeteer = require('puppeteer');

(async () => {
    var browser = await puppeteer.launch({headless: false});
    var page = await browser.newPage();
    var response = await page.goto('https://google.com');

    var browserWSEndpoint = browser.wsEndpoint();
    console.log(browserWSEndpoint); // prints: ws://127.0.0.1:51945/devtools/browser/6462daeb-469b-4ae4-bfd1-c3bd2f26aa5e

    browser.disconnect();
})();

我从console.log 1.js获取browserWSEndpoint字符串。 它工作得很好,但我有两个困难

1-如何从1.js使用变量browserWSEndpoint,这样我就不必总是将其复制粘贴到2.js

2-如果我在1.js上打开一个新页面/选项卡,然后转到google并断开连接(browser.disconnect()),那么如何使用2.js上的该页面/选项卡

爬虫对象保留浏览器实例的状态和 无论在何处调用/传递该实例,它都引用相同的实例 在“背景”中。如果这是一种过度的杀伤力,而你只是想 连接到一个已经运行的chromium使用木偶,你可以这样做 和木偶师联系。看看这个: –mbit

是的,我想这对我来说太过分了:)。但是你发布的链接是我想要的,但是有两个问题

这是我的样品

// 1.js
// open chromium, new tab, go to google.com, print browserWSEndpoint, disconnect
const puppeteer = require('puppeteer');

(async () => {
    var browser = await puppeteer.launch({headless: false});
    var page = await browser.newPage();
    var response = await page.goto('https://google.com');

    var browserWSEndpoint = browser.wsEndpoint();
    console.log(browserWSEndpoint); // prints: ws://127.0.0.1:51945/devtools/browser/6462daeb-469b-4ae4-bfd1-c3bd2f26aa5e

    browser.disconnect();
})();

我从console.log 1.js获取browserWSEndpoint字符串。 它工作得很好,但我有两个困难

1-如何从1.js使用变量browserWSEndpoint,这样我就不必总是将其复制粘贴到2.js


2-如果我在1.js上打开一个新的页面/选项卡,例如转到google并断开连接(browser.disconnect()),如何使用2.js上的该页面/选项卡。

在1.js中创建一个类,保持浏览器/页面状态,并添加相关的登录功能。在2.js中,创建第一个类的实例并与之交互。如果你想
// 1.js
// open chromium, new tab, go to google.com, print browserWSEndpoint, disconnect
const puppeteer = require('puppeteer');

(async () => {
    var browser = await puppeteer.launch({headless: false});
    var page = await browser.newPage();
    var response = await page.goto('https://google.com');

    var browserWSEndpoint = browser.wsEndpoint();
    console.log(browserWSEndpoint); // prints: ws://127.0.0.1:51945/devtools/browser/6462daeb-469b-4ae4-bfd1-c3bd2f26aa5e

    browser.disconnect();
})();
// 2.js
// connect to the open browser with the browserWSEndpoint manualy put in, ... , disconect. 
const puppeteer = require('puppeteer');

(async () => {
    var browser = await puppeteer.connect({browserWSEndpoint: 'ws://127.0.0.1:51945/devtools/browser/6462daeb-469b-4ae4-bfd1-c3bd2f26aa5e'});

    // somehow use the tab that is open from 1.js (google.com)

    await browser.disconnect();
})();