mirror of
https://github.com/gnh1201/welsonjs.git
synced 2025-02-07 07:24:59 +00:00
188 lines
5.3 KiB
JavaScript
188 lines
5.3 KiB
JavaScript
//////////////////////////////////////////////////////////////////////////////////
|
|
// Google Chrome API
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
var SHELL = require("lib/shell");
|
|
var SYS = require("lib/system");
|
|
var FILE = require("lib/file");
|
|
|
|
var ChromeObject = function() {
|
|
this.workingDirectory = SYS.getEnvString("PROGRAMFILES") + "\\Google\\Chrome\\Application";
|
|
this.binPath = SYS.getEnvString("PROGRAMFILES") + "\\Google\\:installedDir\\Application\\chrome.exe";
|
|
this.processID = 0;
|
|
this.installedDir = "Chrome";
|
|
this.profileName = "Default";
|
|
this.userDataDir = null;
|
|
this.proxyPort = 1080;
|
|
this.inPrivate = false;
|
|
this.processList = [];
|
|
|
|
this.setBinPath = function(path) {
|
|
this.binPath = path;
|
|
return this;
|
|
};
|
|
|
|
this.setProfile = function(profileName, installedDir) {
|
|
this.profileName = (profileName == "Default" ? "Chrome" : profileName);
|
|
this.installedDir = installedDir;
|
|
//this.workingDirectory = this.workingDirectory.replace(":installedDir", this.installedDir);
|
|
//this.binPath = this.binPath.replace(":installedDir", this.installedDir);
|
|
this.binPath = this.binPath.replace(":installedDir", "Chrome");
|
|
return this;
|
|
};
|
|
|
|
this.setUserDataDir = function(dirname) {
|
|
this.userDataDir = dirname;
|
|
return this;
|
|
};
|
|
|
|
this.setInstalledDir = function(dirname) {
|
|
this.installedDir = dirname;
|
|
return this;
|
|
};
|
|
|
|
this.setProxyPort = function(s) {
|
|
this.proxyPort = s;
|
|
return this;
|
|
};
|
|
|
|
this.getProcessList = function() {
|
|
return this.processList;
|
|
};
|
|
|
|
this.createShoutcut = function(url) {
|
|
if (!this.userDataDir) {
|
|
this.userDataDir = SHELL.getPathOfMyDocuments() + "\\UserData_Chrome_" + this.profileName;
|
|
}
|
|
|
|
if (!this.inPrivate) {
|
|
SHELL.createDesktopIcon("Chrome Prototype (" + this.installedDir + ")", [
|
|
"cscript",
|
|
"app.js",
|
|
"shoutcut",
|
|
"chrome",
|
|
this.installedDir,
|
|
"--profile-directory=\"" + this.profileName + "\"",
|
|
"--user-data-dir=\"" + this.userDataDir + "\"",
|
|
"\"" + url + "\""
|
|
].join(' '), SYS.getCurrentScriptDirectory());
|
|
} else {
|
|
SHELL.createDesktopIcon("Chrome Prototype (" + this.installedDir + ")", [
|
|
"cscript",
|
|
"app.js",
|
|
"shoutcut",
|
|
"chrome",
|
|
this.installedDir,
|
|
"--incognito",
|
|
"--profile-directory=\"" + this.profileName + "\"",
|
|
"--user-data-dir=\"" + this.userDataDir + "\"",
|
|
"\"" + url + "\""
|
|
].join(' '), SYS.getCurrentScriptDirectory());
|
|
}
|
|
};
|
|
|
|
this.setInPrivate = function(flag) {
|
|
this.inPrivate = flag;
|
|
return this;
|
|
};
|
|
|
|
this.open = function(url) {
|
|
this.setProfile(this.profileName, this.installedDir);
|
|
|
|
// 파일이 없는 경우, 32비트 설치 폴더에 위치하는지 한번 더 확인
|
|
if (!FILE.fileExists(this.binPath)) {
|
|
this.workingDirectory = SYS.getEnvString("PROGRAMFILES(X86)") + "\\Google\\Chrome\\Application";
|
|
this.binPath = SYS.getEnvString("PROGRAMFILES(X86)") + "\\Google\\:installedDir\\Application\\chrome.exe";
|
|
this.setProfile(this.profileName, this.installedDir);
|
|
}
|
|
|
|
// 파일 찾기
|
|
if (!FILE.fileExists(this.binPath)) {
|
|
console.error("ChromeObject.open() -> '" + this.profileName + "' 존재하지 않는 프로파일입니다. 생성 후 사용해주세요.");
|
|
return this;
|
|
}
|
|
|
|
// 바로가기 생성
|
|
this.createShoutcut();
|
|
|
|
/*
|
|
var process;
|
|
while (this.processID == 0) {
|
|
try {
|
|
if (!this.userDataDir) {
|
|
this.userDataDir = SHELL.getPathOfMyDocuments() + "\\UserData_Chrome_" + this.profileName;
|
|
}
|
|
|
|
var shell = SHELL.create().setWorkingDirectory(this.workingDirectory);
|
|
var process = shell.createProcess([
|
|
"\"" + this.binPath + "\"",
|
|
"--profile-directory=\"" + this.profileName + "\"",
|
|
"--proxy-server=\"socks5://127.0.0.1:" + this.proxyPort + "\"",
|
|
"--user-data-dir=\"" + this.userDataDir + "\"",
|
|
"\"" + url + "\""
|
|
].join(" "));
|
|
sleep(1500);
|
|
this.processID = process.ProcessID;
|
|
sleep(1500);
|
|
shell.release();
|
|
} catch (e) {
|
|
console.error("ChromeObject.open() -> " + e.message);
|
|
sleep(1500);
|
|
}
|
|
}
|
|
*/
|
|
|
|
try {
|
|
if (!this.userDataDir) {
|
|
this.userDataDir = SHELL.getPathOfMyDocuments() + "\\UserData_Chrome_" + this.profileName;
|
|
}
|
|
|
|
var shell = SHELL.create();
|
|
shell.setWorkingDirectory(this.workingDirectory);
|
|
|
|
if (!this.inPrivate) {
|
|
shell.runAs(this.binPath, [
|
|
"--profile-directory=\"" + this.profileName + "\"",
|
|
"--proxy-server=\"socks5://127.0.0.1:" + this.proxyPort + "\"",
|
|
"--user-data-dir=\"" + this.userDataDir + "\"",
|
|
"\"" + url + "\""
|
|
]);
|
|
} else {
|
|
shell.runAs(this.binPath, [
|
|
"--incognito",
|
|
"--profile-directory=\"" + this.profileName + "\"",
|
|
"--proxy-server=\"socks5://127.0.0.1:" + this.proxyPort + "\"",
|
|
"--user-data-dir=\"" + this.userDataDir + "\"",
|
|
"\"" + url + "\""
|
|
]);
|
|
}
|
|
|
|
sleep(1500);
|
|
shell.release();
|
|
} catch (e) {
|
|
console.error("ChromeObject.open() -> " + e.message);
|
|
sleep(1500);
|
|
}
|
|
|
|
return this;
|
|
};
|
|
};
|
|
|
|
exports.create = function() {
|
|
return new ChromeObject();
|
|
};
|
|
|
|
exports.getProcessIDs = function() {
|
|
return (new ChromeObject()).getProcessIDs();
|
|
};
|
|
|
|
exports.start = function(url, proxyPort, profileName, userDataDir, installedDir) {
|
|
return (new ChromeObject())
|
|
.setProxyPort(proxyPort)
|
|
.setProfile(profileName, installedDir)
|
|
.setUserDataDir(userDataDir)
|
|
.setInstalledDir(installedDir)
|
|
.open(url)
|
|
.processID
|
|
;
|
|
};
|