出于某种原因,我必须在 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" );
})();