带有 Nodejs Selenium 的 ModHeader Chrome 扩展

时间:2021-01-29 16:42:00

标签: node.js selenium selenium-chromedriver

出于某种原因,我必须在 NodeJs Selenium Chrome 测试自动化中使用 modHeader。我已经从 Chrome 保存了 modHeader 文件,并将扩展加载到浏览器驱动程序中。

(async function startBrowser() {
  const { Builder, By, Key, until} = require('selenium-webdriver');
  const browsertype='chrome';
  require(browsertype + 'driver');


  const driver = require( 'selenium-webdriver/' + browsertype );
  var options = new driver.Options();

  options.addArguments( "load-extension="+process.cwd() +"\\..\\Extensions\\"+browsertype+"\\modHeader\\3.1.17_0" );

  const browser = await new Builder()
                      .forBrowser( browsertype )
                      .setChromeOptions ( options )
                      .build();

})();

这会打开一个带有 https://bewisse.com/modheader/thankyou/ 的新标签页我试图用 ^W 关闭,但是 selenium 崩溃了,所以我冷静下来了。加一个标签。行。 ModHeder 图标出现在栏上,加载成功。

用标题信息填充它:

(async function runTest() {
  const { Builder, By, Key, until} = require('selenium-webdriver');
  const browsertype='chrome';
  require(browsertype + 'driver');


  const driver = require( 'selenium-webdriver/' + browsertype );
  var options = new driver.Options();

  options.addArguments( "load-extension="+process.cwd() +"\\..\\Extensions\\"+browsertype+"\\modHeader\\3.1.17_0" );

  const browser = await new Builder()
                      .forBrowser( browsertype )
                      .setChromeOptions ( options )
                      .build();
                  
  const sendkeys = require( 'sendkeys' );

  const params= { "Authorization":"usr,pwd" };

  const modHeaderNav = {
                    open:  ["{F6}", "{TAB}", "{TAB}", "{TAB}", "{ENTER}" ],
                    name:  ["{TAB}","{TAB}","{TAB}","{TAB}","{TAB}","{TAB}","{TAB}","{TAB}","{TAB}","{TAB}","{TAB}","{TAB}","{TAB}",Object.keys(params)[0] ],
                    value: ["{TAB}", params[Object.keys(params)[0]], "{TAB}", "{ESC}" ],
                    menu:  ["{TAB}", "{TAB}", "{TAB}", "{TAB}", "{TAB}", "{TAB}", "{TAB}", "{TAB}", "{TAB}","{ENTER}" ],
                    importprofile: ["{TAB}", "{DOWN}", "{DOWN}", "{DOWN}", "{DOWN}", "{DOWN}","{ENTER}" ],
                  };
  for(const key of modHeaderNav.open ) {
    await sendkeys( key );
  }
  for(const key of modHeaderNav.name ) {
    await sendkeys( key );
  }
  for(const key of modHeaderNav.value ) {
    await sendkeys( key );
  }

})();

好的,它可以工作,但速度很慢。在 modHeader 选项中,我可以将标题信息保存到 json 文件(ModHeader > 更多 > 导出/共享配置文件 > json)

#1 问题: 有没有办法用这个脚本将保存的 json 导入到浏览器 obj 中,而不是通过 GUI?

#2Question: 在 ruby​​/python 中,有一种方法可以将扩展伪造到驱动程序中,并使用其保存的标头信息。 nodejs 和 selenium 有没有办法伪造驱动扩展?

编辑: 另一种破解 modHeader 的方法,使用 npm chrome-modheader 它非常接近伪造,但不是理想的解决方案。

(async function runTest() {
      const { Builder, By, Key, until} = require('selenium-webdriver');
      const browsertype='chrome';
      require(browsertype + 'driver');
    
      const driver = require( 'selenium-webdriver/' + browsertype );
      const { getExtension, getAddHeaderUrl } = require('chrome-modheader');
      const options = await new driver.Options().addExtensions(getExtension());

      const browser = await new Builder()
                          .forBrowser( browsertype )
                          .setChromeOptions ( options )
                          .build();
    

    const params= { "Authorization":"usr,pwd" };
    for(var param of Object.keys( params ) ){
      await browser.get(getAddHeaderUrl(param, params[param]));
    }
    await browser.navigate().to( "https://test.html" ); 
})();

0 个答案:

没有答案
相关问题