在会话之间保留cookie



在Node.js中执行Selenium脚本时,我需要确保每次会话时都信任浏览器(如果服务器不信任浏览器,它会在MFA中重置SMS,我希望避免这种情况(。在Puppeteer中,它很简单:

const browser = await puppeteer.launch({headless: false,
userDataDir: "./user_data"});

因此,我很想和puppeteer呆在一起,但我在页面上有一个下拉选择器,只能通过名称或xpath以及页面和页面访问。select需要CSS选择器:-(.

所以我搬回了Selenium,但我有一个持久性问题:

在一个会话结束时,我有:

var allCokies = await driver.manage().getCookies();  fs.writeFile("/Users/matnikr/Documents/scrape/selenium/cookies.json",JSON.stringify(allCokies), function(err){
if (err) {return console.log(err)}
console.log('file saved');})

A我有一个开始:

driver = await new Builder().forBrowser('chrome').build();
var allCokies =  JSON.parse(fs.readFileSync("/Users/matnikr/Documents/angular code/Aliorscrape/selenium/cookies.json","utf8"));
for (var key in allCokies){
await driver.manage().addCookie(allCokies[key])
}
await driver.get('https:*******/do/Login');

每次感觉就像";隐姓埋名;会话启动。浏览器不受信任。感谢您的帮助。

你有没有试着和Puppeter做同样的事情?我的意思是加载一个配置文件。因为这实际上是您通过提供"./user_data"作为userDataDir值所做的。

const { Builder } = require('selenium-webdriver');
const { Options } = require('selenium-webdriver/chrome');
function buildChromeDriver() {
const options = new Options();
options.addArguments('user-data-dir=./user_data');
return new Builder()
.forBrowser('chrome')
.setChromeOptions(options)
.build();
}

您始终可以通过打开来验证加载的配置文件chrome://version在浏览器中:

driver.get('chrome://version');

最新更新