在会话之间保留Cookie

时间:2019-11-17 19:59:42

标签: selenium

我需要确保每次在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/scrap/selenium/cookies.json",JSON.stringify(allCokies), function(err){
        if (err) {return console.log(err)}
        console.log('file saved');})

这是我的开始:

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

每当感觉到“隐身”会话开始时。浏览器不受信任。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

您是否尝试过与Puppeteer做相同的事情?我的意思是加载配置文件。因为这实际上就是您通过提供"./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');