From b2e8b1397838d79cff8fe416e9105c88e0817b51 Mon Sep 17 00:00:00 2001 From: Tim Suchanek Date: Wed, 7 Jun 2017 15:50:44 +0200 Subject: [PATCH] First working remote version --- .gitignore | 2 +- cookies.json | 57 +++++ jobs.json | 6 +- lib/index.d.ts | 40 ++++ lib/index.js | 558 +++++++++++++++++++++++++++++++++++++++++++++++ lib/index.js.map | 1 + lib/test.d.ts | 0 lib/test.js | 27 +++ lib/test.js.map | 1 + lib/util.d.ts | 18 ++ lib/util.js | 527 ++++++++++++++++++++++++++++++++++++++++++++ lib/util.js.map | 1 + package.json | 8 +- src/index.ts | 172 +++++++++++---- src/test.ts | 28 +++ src/util.ts | 34 +++ tsconfig.json | 3 +- tslint.json | 2 +- yarn.lock | 30 ++- 19 files changed, 1459 insertions(+), 56 deletions(-) create mode 100644 cookies.json create mode 100644 lib/index.d.ts create mode 100644 lib/index.js create mode 100644 lib/index.js.map create mode 100644 lib/test.d.ts create mode 100644 lib/test.js create mode 100644 lib/test.js.map create mode 100644 lib/util.d.ts create mode 100644 lib/util.js create mode 100644 lib/util.js.map create mode 100644 src/test.ts diff --git a/.gitignore b/.gitignore index 9b0bc0b4..5b64f7fa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ node_modules .idea -lib \ No newline at end of file +.DS_Store \ No newline at end of file diff --git a/cookies.json b/cookies.json new file mode 100644 index 00000000..55c73543 --- /dev/null +++ b/cookies.json @@ -0,0 +1,57 @@ +[ + { + "name": "intercom-session-rqszgt2h", + "value": "S3BZL2Q0UE1NcDc2emsxUCt2cTBBcHl0Q3RTNEFzeEt4eVZCZTkwN0YyOVFNYmlMc0NZNmZOKzFqdkRQdjY5Qi0tU3lzTHljYVRVMWRwTG1qS0d0VlBaZz09--20630c992c745b19b7540a19563ce6464b39de92", + "domain": "localhost", + "path": "/", + "expires": 1497431120000, + "size": 187, + "httpOnly": false, + "secure": false, + "session": false + }, + { + "name": "graphcool_last_used_project_id", + "value": "cj3kcpmaf00gs0101thxas06m", + "domain": "localhost", + "path": "/", + "expires": 1504602319000, + "size": 55, + "httpOnly": false, + "secure": false, + "session": false + }, + { + "name": "graphcool_customer_id", + "value": "cj3kcpmai00gt0101zf5np9hj", + "domain": "localhost", + "path": "/", + "expires": 1504602318000, + "size": 46, + "httpOnly": false, + "secure": false, + "session": false + }, + { + "name": "graphcool_auth_token", + "value": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE0OTY4MjYzMTcsImNsaWVudElkIjoiY2oza2NwbWFpMDBndDAxMDF6ZjVucDloaiJ9.jAl-nb8NtZGUiI4dPZWLWjfeu-90RbLq1bPtS4X7RdI", + "domain": "localhost", + "path": "/", + "expires": 1504602318000, + "size": 177, + "httpOnly": false, + "secure": false, + "session": false + }, + { + "name": "graphcool_last_referral", + "value": "", + "domain": "localhost", + "path": "/", + "expires": 1504602260000, + "size": 23, + "httpOnly": false, + "secure": false, + "session": false + } +] \ No newline at end of file diff --git a/jobs.json b/jobs.json index df4310a0..f7fd5df5 100644 --- a/jobs.json +++ b/jobs.json @@ -1,18 +1,18 @@ [ { - "fn": "function (client, url) { return tslib_1.__awaiter(_this, void 0, void 0, function () {\n var Network, Page, e_1;\n return tslib_1.__generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n Network = client.Network, Page = client.Page;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 6, , 7]);\n return [4 /*yield*/, Promise.all([Network.enable(), Page.enable()])];\n case 2:\n _a.sent();\n return [4 /*yield*/, Page.navigate({ url: url })];\n case 3:\n _a.sent();\n return [4 /*yield*/, Page.loadEventFired()];\n case 4:\n _a.sent();\n return [4 /*yield*/, util_1.wait(500)];\n case 5:\n _a.sent();\n console.log('Navigated to', url);\n return [3 /*break*/, 7];\n case 6:\n e_1 = _a.sent();\n console.error(e_1);\n return [3 /*break*/, 7];\n case 7: return [2 /*return*/];\n }\n });\n }); }", + "fn": "function (client, url) { return __awaiter(_this, void 0, void 0, function () {\n var Network, Page, e_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n Network = client.Network, Page = client.Page;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 6, , 7]);\n return [4 /*yield*/, Promise.all([Network.enable(), Page.enable()])];\n case 2:\n _a.sent();\n return [4 /*yield*/, Page.navigate({ url: url })];\n case 3:\n _a.sent();\n return [4 /*yield*/, Page.loadEventFired()];\n case 4:\n _a.sent();\n return [4 /*yield*/, util_1.wait(500)];\n case 5:\n _a.sent();\n console.log('Navigated to', url);\n return [3 /*break*/, 7];\n case 6:\n e_1 = _a.sent();\n console.error(e_1);\n return [3 /*break*/, 7];\n case 7: return [2 /*return*/];\n }\n });\n }); }", "args": { "url": "http://localhost:8064" } }, { - "fn": "function (client, selector, artificialClick) { return tslib_1.__awaiter(_this, void 0, void 0, function () {\n var exists, fakeClick;\n return tslib_1.__generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, util_1.nodeExists(client, selector)];\n case 1:\n exists = _a.sent();\n if (!exists) {\n throw new Error(\"click(): node for selector \" + selector + \" doesn't exist\");\n }\n fakeClick = typeof artificialClick === 'boolean' ? artificialClick : this.options.useArtificialClick;\n return [4 /*yield*/, util_1.click(client, fakeClick, selector)];\n case 2:\n _a.sent();\n console.log('Clicked on ', selector);\n return [2 /*return*/];\n }\n });\n }); }", + "fn": "function (client, selector, artificialClick) { return __awaiter(_this, void 0, void 0, function () {\n var exists, fakeClick;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, util_1.nodeExists(client, selector)];\n case 1:\n exists = _a.sent();\n if (!exists) {\n throw new Error(\"click(): node for selector \" + selector + \" doesn't exist\");\n }\n fakeClick = typeof artificialClick === 'boolean' ? artificialClick : this.options.useArtificialClick;\n return [4 /*yield*/, util_1.click(client, fakeClick, selector)];\n case 2:\n _a.sent();\n console.log('Clicked on ', selector);\n return [2 /*return*/];\n }\n });\n }); }", "args": { "selector": "#submit" } }, { - "fn": "function (client, selector) { return tslib_1.__awaiter(_this, void 0, void 0, function () {\n return tslib_1.__generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n console.log(\"Waiting for \" + selector);\n return [4 /*yield*/, util_1.waitForNode(client, selector, this.options.waitTimeout)];\n case 1:\n _a.sent();\n console.log(\"Waited for \" + selector);\n return [2 /*return*/];\n }\n });\n }); }", + "fn": "function (client, selector) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n console.log(\"Waiting for \" + selector);\n return [4 /*yield*/, util_1.waitForNode(client, selector, this.options.waitTimeout)];\n case 1:\n _a.sent();\n console.log(\"Waited for \" + selector);\n return [2 /*return*/];\n }\n });\n }); }", "args": { "selector": "div" } diff --git a/lib/index.d.ts b/lib/index.d.ts new file mode 100644 index 00000000..8a361348 --- /dev/null +++ b/lib/index.d.ts @@ -0,0 +1,40 @@ +export interface Options { + useArtificialClick?: boolean; + closeTab?: boolean; + waitTimeout?: number; + runRemote?: boolean; +} +declare class Chromeless { + private options; + private cdp; + private queue; + private client; + private processCallback; + private lastValue; + private target; + static functionUrl: string; + constructor(options?: Options); + goto(url: string): Chromeless; + click(selector: string, artificialClick?: boolean): Chromeless; + type(text: string, selector?: string): Chromeless; + backspace(n: number, selector?: string): Chromeless; + getCookies(url: string): Chromeless; + setCookies(cookies: any[], url: string): Chromeless; + clearCookies(): Chromeless; + sendKeyCode(keyCode: number, selector?: string, modifiers?: number): Chromeless; + wait(selector: string | number): Chromeless; + evaluate(fn: string | (() => void)): Chromeless; + value(selector: string): Chromeless; + screenshot(outputPath: string): Chromeless; + processJobs(jobs: any[]): Promise; + end(): Promise; + private processRemote(); + private processLocal(); + saveJobs(path: any): Promise; + private serializeJobs(); + private getSerializableJobs(); + private deserializeJobs(jobs); + private prepareFunction(job); + private extractFunctionBody(fn); +} +export default Chromeless; diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 00000000..c585df26 --- /dev/null +++ b/lib/index.js @@ -0,0 +1,558 @@ +"use strict"; +var __assign = (this && this.__assign) || Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [0, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +var CDP = require("chrome-remote-interface"); +var fetch = require("isomorphic-fetch"); +var util_1 = require("./util"); +var fs = require("fs"); +var Chromeless = (function () { + function Chromeless(options) { + var _this = this; + this.options = __assign({ useArtificialClick: false, closeTab: true, waitTimeout: 10000, runRemote: false }, options); + this.queue = []; + if (!this.options.runRemote) { + CDP.New().then(function (target) { + _this.target = target; + return CDP({ target: target }); + }).then(function (client) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + console.log('Booted the CDP client'); + this.client = client; + if (this.processCallback) { + this.processCallback(); + this.processCallback = undefined; + } + return [2 /*return*/]; + }); + }); }); + } + } + Chromeless.prototype.goto = function (url) { + var _this = this; + this.queue.push({ + fn: function (client, url) { return __awaiter(_this, void 0, void 0, function () { + var Network, Page, e_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + Network = client.Network, Page = client.Page; + _a.label = 1; + case 1: + _a.trys.push([1, 6, , 7]); + return [4 /*yield*/, Promise.all([Network.enable(), Page.enable()])]; + case 2: + _a.sent(); + return [4 /*yield*/, Page.navigate({ url: url })]; + case 3: + _a.sent(); + return [4 /*yield*/, Page.loadEventFired()]; + case 4: + _a.sent(); + return [4 /*yield*/, util_1.wait(500)]; + case 5: + _a.sent(); + console.log('Navigated to', url); + return [3 /*break*/, 7]; + case 6: + e_1 = _a.sent(); + console.error(e_1); + return [3 /*break*/, 7]; + case 7: return [2 /*return*/]; + } + }); + }); }, + args: { url: url }, + }); + return this; + }; + Chromeless.prototype.click = function (selector, artificialClick) { + var _this = this; + this.queue.push({ + fn: function (client, selector, artificialClick) { return __awaiter(_this, void 0, void 0, function () { + var exists, fakeClick; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, util_1.nodeExists(client, selector)]; + case 1: + exists = _a.sent(); + if (!exists) { + throw new Error("click(): node for selector " + selector + " doesn't exist"); + } + fakeClick = typeof artificialClick === 'boolean' ? artificialClick : this.options.useArtificialClick; + return [4 /*yield*/, util_1.click(client, fakeClick, selector)]; + case 2: + _a.sent(); + console.log('Clicked on ', selector); + return [2 /*return*/]; + } + }); + }); }, + args: { + selector: selector, + artificialClick: artificialClick || null, + }, + }); + return this; + }; + Chromeless.prototype.type = function (text, selector) { + var _this = this; + this.queue.push({ + fn: function (client, text, selector) { return __awaiter(_this, void 0, void 0, function () { + var exists; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!selector) return [3 /*break*/, 2]; + return [4 /*yield*/, util_1.nodeExists(client, selector)]; + case 1: + exists = _a.sent(); + if (!exists) { + console.log('throwing'); + throw new Error("type(): node for selector " + selector + " doesn't exist"); + } + console.log('Node exists', exists); + _a.label = 2; + case 2: return [4 /*yield*/, util_1.type(client, this.options.useArtificialClick, text, selector)]; + case 3: + _a.sent(); + console.log("Typed " + text + " in " + selector); + return [2 /*return*/]; + } + }); + }); }, + args: { + text: text, + selector: selector || null, + }, + }); + return this; + }; + Chromeless.prototype.backspace = function (n, selector) { + var _this = this; + this.queue.push({ + fn: function (client, n, selector) { return __awaiter(_this, void 0, void 0, function () { + var exists; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!selector) return [3 /*break*/, 2]; + return [4 /*yield*/, util_1.nodeExists(client, selector)]; + case 1: + exists = _a.sent(); + if (!exists) { + throw new Error("type(): node for selector " + selector + " doesn't exist"); + } + console.log('Node exists', exists); + _a.label = 2; + case 2: return [4 /*yield*/, util_1.backspace(client, this.options.useArtificialClick, n, selector)]; + case 3: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }, + args: { + n: n, + selector: selector || null, + }, + }); + return this; + }; + Chromeless.prototype.getCookies = function (url) { + var _this = this; + this.queue.push({ + fn: function (client, url) { return __awaiter(_this, void 0, void 0, function () { + var value; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, util_1.getCookies(client, url)]; + case 1: + value = _a.sent(); + console.log('got cookies', value); + this.lastValue = value; + return [2 /*return*/]; + } + }); + }); }, + args: { url: url }, + }); + return this; + }; + Chromeless.prototype.setCookies = function (cookies, url) { + var _this = this; + this.queue.push({ + fn: function (client, cookies, url) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, util_1.setCookies(client, cookies, url)]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }, + args: { cookies: cookies, url: url }, + }); + return this; + }; + Chromeless.prototype.clearCookies = function () { + var _this = this; + this.queue.push({ + fn: function (client) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, util_1.clearCookies(client)]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }, + }); + return this; + }; + Chromeless.prototype.sendKeyCode = function (keyCode, selector, modifiers) { + var _this = this; + this.queue.push({ + fn: function (client, keyCode, selector, modifiers) { return __awaiter(_this, void 0, void 0, function () { + var exists; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!selector) return [3 /*break*/, 2]; + return [4 /*yield*/, util_1.nodeExists(client, selector)]; + case 1: + exists = _a.sent(); + if (!exists) { + throw new Error("type(): node for selector " + selector + " doesn't exist"); + } + console.log('Node exists', exists); + _a.label = 2; + case 2: + console.log('Sending keyCode', keyCode, modifiers); + return [4 /*yield*/, util_1.sendKeyCode(client, this.options.useArtificialClick, keyCode, selector, modifiers)]; + case 3: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }, + args: { + keyCode: keyCode, + selector: selector || null, + modifiers: modifiers || null, + }, + }); + return this; + }; + Chromeless.prototype.wait = function (selector) { + var _this = this; + if (typeof selector === 'number') { + this.queue.push({ + fn: function (client, selector) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + console.log("Waiting for " + selector + "ms"); + return [4 /*yield*/, util_1.wait(selector)]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }, + args: { selector: selector }, + }); + } + else { + this.queue.push({ + fn: function (client, selector) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + console.log("Waiting for " + selector); + return [4 /*yield*/, util_1.waitForNode(client, selector, this.options.waitTimeout)]; + case 1: + _a.sent(); + console.log("Waited for " + selector); + return [2 /*return*/]; + } + }); + }); }, + args: { selector: selector }, + }); + } + return this; + }; + Chromeless.prototype.evaluate = function (fn) { + var _this = this; + this.queue.push({ + fn: function (client, fn) { return __awaiter(_this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + console.log('Evaluating', "" + fn); + _a = this; + return [4 /*yield*/, util_1.evaluate(client, fn)]; + case 1: + _a.lastValue = _b.sent(); + return [2 /*return*/]; + } + }); + }); }, + args: { fn: fn.toString() }, + }); + return this; + }; + Chromeless.prototype.value = function (selector) { + var _this = this; + this.queue.push({ + fn: function (client, selector) { return __awaiter(_this, void 0, void 0, function () { + var exists, value; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, util_1.nodeExists(client, selector)]; + case 1: + exists = _a.sent(); + if (!exists) { + throw new Error("value: node for selector " + selector + " doesn't exist"); + } + return [4 /*yield*/, util_1.getValue(client, selector)]; + case 2: + value = _a.sent(); + this.lastValue = value; + return [2 /*return*/]; + } + }); + }); }, + args: { selector: selector }, + }); + return this; + }; + Chromeless.prototype.screenshot = function (outputPath) { + var _this = this; + this.queue.push({ + fn: function (client, outputPath) { return __awaiter(_this, void 0, void 0, function () { + var value; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, util_1.screenshot(client, outputPath)]; + case 1: + value = _a.sent(); + return [2 /*return*/]; + } + }); + }); }, + args: { outputPath: outputPath }, + }); + return this; + }; + Chromeless.prototype.processJobs = function (jobs) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + this.queue = this.deserializeJobs(jobs); + console.log("Successfully deserialized " + this.queue.length + " jobs"); + return [2 /*return*/, this.end()]; + }); + }); + }; + Chromeless.prototype.end = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + if (this.options.runRemote) { + return [2 /*return*/, this.processRemote()]; + } + else { + return [2 /*return*/, this.processLocal()]; + } + return [2 /*return*/]; + }); + }); + }; + Chromeless.prototype.processRemote = function () { + return __awaiter(this, void 0, void 0, function () { + var jobs, data, json; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + console.log('Requesting ' + Chromeless.functionUrl); + jobs = this.serializeJobs(); + return [4 /*yield*/, fetch(Chromeless.functionUrl, { + method: 'POST', + body: JSON.stringify({ + jobs: this.getSerializableJobs(), + options: this.options, + }) + })]; + case 1: + data = _a.sent(); + return [4 /*yield*/, data.json()]; + case 2: + json = _a.sent(); + console.log(json); + if (json.message) { + if (json.message === 'Internal server error') { + console.log('Got internal server error, retrying'); + return [2 /*return*/, this.processRemote()]; + } + throw new Error("Didn't get the expected response " + json); + } + return [2 /*return*/, json.result]; + } + }); + }); + }; + Chromeless.prototype.processLocal = function () { + var _this = this; + return new Promise(function (resolve, reject) { + var process = function () { return __awaiter(_this, void 0, void 0, function () { + var jobs, _loop_1, this_1, _i, jobs_1, job, id; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + jobs = this.queue; + _loop_1 = function (job) { + var args, e_2; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + args = []; + if (job.args) { + args = Object.keys(job.args).map(function (key) { return job.args[key]; }); + } + return [4 /*yield*/, job.fn.apply(this_1, [this_1.client].concat(args))]; + case 1: + _a.sent(); + return [3 /*break*/, 3]; + case 2: + e_2 = _a.sent(); + reject(e_2); + return [3 /*break*/, 3]; + case 3: return [2 /*return*/]; + } + }); + }; + this_1 = this; + _i = 0, jobs_1 = jobs; + _a.label = 1; + case 1: + if (!(_i < jobs_1.length)) return [3 /*break*/, 4]; + job = jobs_1[_i]; + return [5 /*yield**/, _loop_1(job)]; + case 2: + _a.sent(); + _a.label = 3; + case 3: + _i++; + return [3 /*break*/, 1]; + case 4: + id = this.target.id; + if (this.options.closeTab) { + CDP.Close({ id: id }); + } + resolve(this.lastValue); + return [2 /*return*/]; + } + }); + }); }; + if (_this.client) { + return process(); + } + else { + _this.processCallback = process; + } + }); + }; + Chromeless.prototype.saveJobs = function (path) { + return __awaiter(this, void 0, void 0, function () { + var str; + return __generator(this, function (_a) { + str = this.serializeJobs(); + fs.writeFileSync(path, str, 'utf-8'); + return [2 /*return*/]; + }); + }); + }; + Chromeless.prototype.serializeJobs = function () { + return JSON.stringify(this.getSerializableJobs(), null, 2); + }; + Chromeless.prototype.getSerializableJobs = function () { + return this.queue.map(function (job) { + return { + fn: job.fn.toString(), + args: job.args, + }; + }); + }; + Chromeless.prototype.deserializeJobs = function (jobs) { + var _this = this; + // const jobs = JSON.parse(str) + global['_this'] = this; + return jobs.map(function (job) { + var fnString = _this.prepareFunction(job); + var fn = eval(fnString); + return { + fn: fn, + args: job.args, + }; + }); + }; + Chromeless.prototype.prepareFunction = function (job) { + var body = this.extractFunctionBody(job.fn); + var args = ['client'].concat(job.args ? Object.keys(job.args) : []); + return "(" + args + ") => " + body; + }; + Chromeless.prototype.extractFunctionBody = function (fn) { + var startIndex = fn.indexOf('{'); + return fn.slice(startIndex, fn.length); + }; + return Chromeless; +}()); +// public static functionUrl: string = 'http://localhost:3000/package/lambda/test' +Chromeless.functionUrl = 'https://dwrl0j96t5.execute-api.eu-west-1.amazonaws.com/dev/package/lambda/test'; +exports.default = Chromeless; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/lib/index.js.map b/lib/index.js.map new file mode 100644 index 00000000..9487394e --- /dev/null +++ b/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/test.d.ts b/lib/test.d.ts new file mode 100644 index 00000000..e69de29b diff --git a/lib/test.js b/lib/test.js new file mode 100644 index 00000000..c70ec311 --- /dev/null +++ b/lib/test.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var _1 = require("./"); +var chromeless = new _1.default({ + closeTab: false, + runRemote: false, +}); +// const jobs = JSON.parse(fs.readFileSync('jobs.json', 'utf-8')) +// const cookies = JSON.parse(fs.readFileSync('cookies.json', 'utf-8')) +chromeless + .goto('http://localhost:8064') + .click('#submit') + .wait('div') + .screenshot('shot.png') + .end() + .then(function (result) { + console.log('done running it remotely result:', result); +}) + .catch(function (e) { + console.error(e); +}); +// .saveJobs('jobs.json') +// .processJobs(jobs) +// .setCookies(cookies, 'http://localhost:4000') +// .getCookies('http://localhost:4000') +// .evaluate(() => location.href = '/') +//# sourceMappingURL=test.js.map \ No newline at end of file diff --git a/lib/test.js.map b/lib/test.js.map new file mode 100644 index 00000000..5eecf9f0 --- /dev/null +++ b/lib/test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;AAAA,uBAA2B;AAG3B,IAAM,UAAU,GAAG,IAAI,UAAU,CAAC;IAChC,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,KAAK;CACjB,CAAC,CAAA;AAEF,iEAAiE;AACjE,uEAAuE;AAEvE,UAAU;KACP,IAAI,CAAC,uBAAuB,CAAC;KAC7B,KAAK,CAAC,SAAS,CAAC;KAChB,IAAI,CAAC,KAAK,CAAC;KACX,UAAU,CAAC,UAAU,CAAC;KACtB,GAAG,EAAE;KACL,IAAI,CAAC,UAAC,MAAM;IACX,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAA;AACzD,CAAC,CAAC;KACD,KAAK,CAAC,UAAA,CAAC;IACN,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAClB,CAAC,CAAC,CAAA;AACJ,2BAA2B;AAC3B,qBAAqB;AACrB,gDAAgD;AAChD,uCAAuC;AACvC,uCAAuC"} \ No newline at end of file diff --git a/lib/util.d.ts b/lib/util.d.ts new file mode 100644 index 00000000..d2b89d4f --- /dev/null +++ b/lib/util.d.ts @@ -0,0 +1,18 @@ +export declare function waitForNode(client: any, selector: any, waitTimeout: number): Promise<{}>; +export declare function wait(timeout: number): Promise<{}>; +export declare function nodeExists(client: any, selector: any): Promise; +export declare function getPosition(client: any, selector: any): Promise<{ + x: number; + y: number; +}>; +export declare function click(client: any, useArtificialClick: any, selector: any): Promise; +export declare function focus(client: any, selector: any): Promise; +export declare function evaluate(client: any, fn: any): Promise; +export declare function type(client: any, useArtificialClick: any, text: any, selector: any): Promise; +export declare function sendKeyCode(client: any, useArtificialClick: any, keyCode: any, selector: any, modifiers: any): Promise; +export declare function backspace(client: any, useArtificialClick: any, n: any, selector: any): Promise; +export declare function getValue(client: any, selector: any): Promise; +export declare function getCookies(client: any, url: string): Promise; +export declare function setCookies(client: any, cookies: any[], url: any): Promise; +export declare function clearCookies(client: any): Promise; +export declare function screenshot(client: any, outputPath: any): Promise; diff --git a/lib/util.js b/lib/util.js new file mode 100644 index 00000000..54c61cb0 --- /dev/null +++ b/lib/util.js @@ -0,0 +1,527 @@ +"use strict"; +var __assign = (this && this.__assign) || Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [0, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +var fs = require("fs"); +// export async function nodeAppears(client, selector) { +// // browser code to register and parse mutations +// const browserCode = (selector) => { +// return new Promise((fulfill, reject) => { +// new MutationObserver((mutations, observer) => { +// // add all the new nodes +// const nodes = [] +// mutations.forEach((mutation) => { +// nodes.push(...mutation.addedNodes) +// }) +// // fulfills if at least one node matches the selector +// if (nodes.find((node) => node.matches(selector))) { +// observer.disconnect() +// fulfill() +// } +// }).observe(document.body, { +// childList: true +// }) +// }) +// } +// // inject the browser code +// const {Runtime} = client +// await Runtime.evaluate({ +// expression: `(${browserCode})(\`${selector}\`)`, +// awaitPromise: true +// }) +// } +function waitForNode(client, selector, waitTimeout) { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + var Runtime, getNode, result, start_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + Runtime = client.Runtime; + getNode = function (selector) { + return document.querySelector(selector); + }; + return [4 /*yield*/, Runtime.evaluate({ + expression: "(" + getNode + ")(`" + selector + "`)", + })]; + case 1: + result = _a.sent(); + if (result.result.value === null) { + start_1 = new Date().getTime(); + return [2 /*return*/, new Promise(function (resolve, reject) { + var interval = setInterval(function () { return __awaiter(_this, void 0, void 0, function () { + var result; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (new Date().getTime() - start_1 > waitTimeout) { + clearInterval(interval); + reject(new Error("wait() timed out after " + waitTimeout + "ms")); + } + return [4 /*yield*/, Runtime.evaluate({ + expression: "(" + getNode + ")(`" + selector + "`)", + })]; + case 1: + result = _a.sent(); + if (result.result.value !== null) { + clearInterval(interval); + resolve(); + } + return [2 /*return*/]; + } + }); + }); }, 500); + })]; + } + else { + return [2 /*return*/]; + } + return [2 /*return*/]; + } + }); + }); +} +exports.waitForNode = waitForNode; +function wait(timeout) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, new Promise(function (resolve, reject) { + setTimeout(function () { + resolve(); + }, timeout); + })]; + }); + }); +} +exports.wait = wait; +function nodeExists(client, selector) { + return __awaiter(this, void 0, void 0, function () { + var Runtime, exists, expression, result, exists_1, e_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + Runtime = client.Runtime; + exists = function (selector) { + return document.querySelector(selector); + }; + expression = "(" + exists + ")(`" + selector + "`)"; + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + return [4 /*yield*/, Runtime.evaluate({ + expression: expression, + }) + // counter intuitive: if it is a real object and not just null, + // the chrome debugger won't return a value but return a objectId + ]; + case 2: + result = _a.sent(); + exists_1 = typeof result.result.value === 'undefined'; + console.log('node exists', exists_1); + return [2 /*return*/, exists_1]; + case 3: + e_1 = _a.sent(); + console.error('Error while trying to run nodeExists'); + console.error(e_1); + return [3 /*break*/, 4]; + case 4: return [2 /*return*/]; + } + }); + }); +} +exports.nodeExists = nodeExists; +function getPosition(client, selector) { + return __awaiter(this, void 0, void 0, function () { + var Runtime, getTop, getLeft, topExpression, topResult, leftExpression, leftResult, x, y; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + Runtime = client.Runtime; + getTop = function (selector) { + return document.querySelector(selector).getBoundingClientRect().top; + }; + getLeft = function (selector) { + return document.querySelector(selector).getBoundingClientRect().left; + }; + topExpression = "(" + getTop + ")(`" + selector + "`)"; + return [4 /*yield*/, Runtime.evaluate({ + expression: topExpression, + })]; + case 1: + topResult = _a.sent(); + leftExpression = "(" + getLeft + ")(`" + selector + "`)"; + return [4 /*yield*/, Runtime.evaluate({ + expression: leftExpression, + })]; + case 2: + leftResult = _a.sent(); + x = parseInt(leftResult.result.value, 10); + y = parseInt(topResult.result.value, 10); + if (isNaN(x) || isNaN(y)) { + throw new Error("The viewport position for " + selector + " couldn't be determined. x: " + x + " y: " + y); + } + return [2 /*return*/, { + x: x, + y: y, + }]; + } + }); + }); +} +exports.getPosition = getPosition; +function click(client, useArtificialClick, selector) { + return __awaiter(this, void 0, void 0, function () { + var Runtime, click_1, expression, position, Input, options; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!useArtificialClick) return [3 /*break*/, 2]; + console.log('Using artificial .click()'); + Runtime = client.Runtime; + click_1 = function (selector) { + return document.querySelector(selector).click(); + }; + expression = "(" + click_1 + ")(`" + selector + "`)"; + return [4 /*yield*/, Runtime.evaluate({ + expression: expression, + })]; + case 1: + _a.sent(); + return [3 /*break*/, 6]; + case 2: return [4 /*yield*/, getPosition(client, selector)]; + case 3: + position = _a.sent(); + Input = client.Input; + options = { + x: position.x + 0, + y: position.y + 0, + button: 'left', + clickCount: 1 + }; + return [4 /*yield*/, Input.dispatchMouseEvent(__assign({}, options, { type: 'mousePressed' }))]; + case 4: + _a.sent(); + return [4 /*yield*/, Input.dispatchMouseEvent(__assign({}, options, { type: 'mouseReleased' }))]; + case 5: + _a.sent(); + _a.label = 6; + case 6: return [2 /*return*/]; + } + }); + }); +} +exports.click = click; +function focus(client, selector) { + return __awaiter(this, void 0, void 0, function () { + var Runtime, focus, expression; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + Runtime = client.Runtime; + focus = function (selector) { + return document.querySelector(selector).focus(); + }; + expression = "(" + focus + ")(`" + selector + "`)"; + return [4 /*yield*/, Runtime.evaluate({ + expression: expression, + })]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); +} +exports.focus = focus; +function evaluate(client, fn) { + return __awaiter(this, void 0, void 0, function () { + var Runtime, expression, result; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + Runtime = client.Runtime; + expression = "(" + fn + ")()"; + return [4 /*yield*/, Runtime.evaluate({ + expression: expression, + })]; + case 1: + result = _a.sent(); + return [2 /*return*/, result.result.value]; + } + }); + }); +} +exports.evaluate = evaluate; +function type(client, useArtificialClick, text, selector) { + return __awaiter(this, void 0, void 0, function () { + var Input, i, char, options, res; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!selector) return [3 /*break*/, 3]; + return [4 /*yield*/, click(client, useArtificialClick, selector)]; + case 1: + _a.sent(); + return [4 /*yield*/, wait(500)]; + case 2: + _a.sent(); + _a.label = 3; + case 3: + Input = client.Input; + i = 0; + _a.label = 4; + case 4: + if (!(i < text.length)) return [3 /*break*/, 7]; + char = text[i]; + options = { + type: 'char', + text: char, + unmodifiedText: char, + }; + return [4 /*yield*/, Input.dispatchKeyEvent(options)]; + case 5: + res = _a.sent(); + _a.label = 6; + case 6: + i++; + return [3 /*break*/, 4]; + case 7: return [2 /*return*/]; + } + }); + }); +} +exports.type = type; +function sendKeyCode(client, useArtificialClick, keyCode, selector, modifiers) { + return __awaiter(this, void 0, void 0, function () { + var Input, options; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!selector) return [3 /*break*/, 3]; + return [4 /*yield*/, click(client, useArtificialClick, selector)]; + case 1: + _a.sent(); + return [4 /*yield*/, wait(500)]; + case 2: + _a.sent(); + _a.label = 3; + case 3: + Input = client.Input; + options = { + nativeVirtualKeyCode: keyCode, + windowsVirtualKeyCode: keyCode, + }; + if (modifiers) { + options['modifiers'] = modifiers; + } + return [4 /*yield*/, Input.dispatchKeyEvent(__assign({}, options, { type: 'rawKeyDown' }))]; + case 4: + _a.sent(); + return [4 /*yield*/, Input.dispatchKeyEvent(__assign({}, options, { type: 'keyUp' }))]; + case 5: + _a.sent(); + return [2 /*return*/]; + } + }); + }); +} +exports.sendKeyCode = sendKeyCode; +function backspace(client, useArtificialClick, n, selector) { + return __awaiter(this, void 0, void 0, function () { + var Input, i, options_1, options, res; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!selector) return [3 /*break*/, 3]; + return [4 /*yield*/, click(client, useArtificialClick, selector)]; + case 1: + _a.sent(); + return [4 /*yield*/, wait(500)]; + case 2: + _a.sent(); + _a.label = 3; + case 3: + Input = client.Input; + i = 0; + _a.label = 4; + case 4: + if (!(i < n)) return [3 /*break*/, 8]; + options_1 = { + modifiers: 8, + key: 'Backspace', + code: 'Backspace', + nativeVirtualKeyCode: 8, + windowsVirtualKeyCode: 8, + }; + return [4 /*yield*/, Input.dispatchKeyEvent(__assign({}, options_1, { type: 'rawKeyDown' }))]; + case 5: + _a.sent(); + return [4 /*yield*/, Input.dispatchKeyEvent(__assign({}, options_1, { type: 'keyUp' }))]; + case 6: + _a.sent(); + console.log('sent backspace', options_1); + _a.label = 7; + case 7: + i++; + return [3 /*break*/, 4]; + case 8: + options = { + type: 'rawKeyDown', + nativeVirtualKeyCode: 46, + }; + return [4 /*yield*/, Input.dispatchKeyEvent(options)]; + case 9: + res = _a.sent(); + return [2 /*return*/]; + } + }); + }); +} +exports.backspace = backspace; +function getValue(client, selector) { + return __awaiter(this, void 0, void 0, function () { + var Runtime, browserCode, expression, result, e_2; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + Runtime = client.Runtime; + browserCode = function (selector) { + return document.querySelector(selector).value; + }; + expression = "(" + browserCode + ")(`" + selector + "`)"; + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + return [4 /*yield*/, Runtime.evaluate({ + expression: expression, + })]; + case 2: + result = _a.sent(); + return [2 /*return*/, result.result.value]; + case 3: + e_2 = _a.sent(); + console.error(e_2); + return [3 /*break*/, 4]; + case 4: return [2 /*return*/]; + } + }); + }); +} +exports.getValue = getValue; +function getCookies(client, url) { + return __awaiter(this, void 0, void 0, function () { + var Network, result; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + Network = client.Network; + return [4 /*yield*/, Network.getCookies([url])]; + case 1: + result = _a.sent(); + return [2 /*return*/, result.cookies]; + } + }); + }); +} +exports.getCookies = getCookies; +function setCookies(client, cookies, url) { + return __awaiter(this, void 0, void 0, function () { + var Network, _i, cookies_1, cookie; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + Network = client.Network; + _i = 0, cookies_1 = cookies; + _a.label = 1; + case 1: + if (!(_i < cookies_1.length)) return [3 /*break*/, 4]; + cookie = cookies_1[_i]; + return [4 /*yield*/, Network.setCookie(__assign({}, cookie, { url: url }))]; + case 2: + _a.sent(); + _a.label = 3; + case 3: + _i++; + return [3 /*break*/, 1]; + case 4: return [2 /*return*/]; + } + }); + }); +} +exports.setCookies = setCookies; +function clearCookies(client) { + return __awaiter(this, void 0, void 0, function () { + var Network; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + Network = client.Network; + return [4 /*yield*/, Network.clearBrowserCookies()]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); +} +exports.clearCookies = clearCookies; +function screenshot(client, outputPath) { + return __awaiter(this, void 0, void 0, function () { + var Page, screenshot, result; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + Page = client.Page; + return [4 /*yield*/, Page.captureScreenshot({ format: 'png' })]; + case 1: + screenshot = _a.sent(); + result = screenshot.data; + fs.writeFileSync(outputPath, result, 'base64'); + return [2 /*return*/]; + } + }); + }); +} +exports.screenshot = screenshot; +//# sourceMappingURL=util.js.map \ No newline at end of file diff --git a/lib/util.js.map b/lib/util.js.map new file mode 100644 index 00000000..31421fab --- /dev/null +++ b/lib/util.js.map @@ -0,0 +1 @@ +{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index 44d5e988..92956adb 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,12 @@ { "name": "chromeless", - "version": "0.0.2", + "version": "0.1.4", "author": "Tim Suchanek ", "main": "lib/index.js", "typings": "lib/index", + "directories": { + "lib": "lib" + }, "license": "MIT", "devDependencies": { "@types/node": "^7.0.27", @@ -20,6 +23,7 @@ "tslint": "tslint -c tslint.json -p tsconfig.json" }, "dependencies": { - "chrome-remote-interface": "^0.23.0" + "chrome-remote-interface": "^0.23.0", + "isomorphic-fetch": "^2.2.1" } } diff --git a/src/index.ts b/src/index.ts index 3a3ab287..5de95873 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,10 @@ import * as CDP from 'chrome-remote-interface' -import {wait, click, type, getValue, waitForNode, nodeExists, backspace, evaluate, sendKeyCode} from './util' +import * as fetch from 'isomorphic-fetch' +import { + wait, click, type, getValue, waitForNode, nodeExists, + backspace, evaluate, sendKeyCode, getCookies, setCookies, clearCookies, + screenshot, +} from './util' import * as fs from 'fs' export interface Options { @@ -33,6 +38,8 @@ class Chromeless { private processCallback: () => Promise private lastValue: any private target: any + // public static functionUrl: string = 'http://localhost:3000/package/lambda/test' + public static functionUrl: string = 'https://dwrl0j96t5.execute-api.eu-west-1.amazonaws.com/dev/package/lambda/test' constructor(options?: Options) { this.options = { @@ -91,7 +98,10 @@ class Chromeless { await click(client, fakeClick, selector) console.log('Clicked on ', selector) }, - args: {selector, artificialClick}, + args: { + selector, + artificialClick: artificialClick || null, + }, }) @@ -112,7 +122,10 @@ class Chromeless { await type(client, this.options.useArtificialClick, text, selector) console.log(`Typed ${text} in ${selector}`) }, - args: {text, selector}, + args: { + text, + selector: selector || null, + }, }) return this } @@ -129,8 +142,45 @@ class Chromeless { } await backspace(client, this.options.useArtificialClick, n, selector) }, - args: {n, selector}, + args: { + n, + selector: selector || null, + }, + }) + return this + } + + public getCookies(url: string): Chromeless { + this.queue.push({ + fn: async (client, url) => { + const value = await getCookies(client, url) + console.log('got cookies', value) + this.lastValue = value + }, + args: {url}, }) + + return this + } + + public setCookies(cookies: any[], url: string): Chromeless { + this.queue.push({ + fn: async (client, cookies, url) => { + await setCookies(client, cookies, url) + }, + args: {cookies, url}, + }) + + return this + } + + public clearCookies(): Chromeless { + this.queue.push({ + fn: async (client) => { + await clearCookies(client) + }, + }) + return this } @@ -147,7 +197,11 @@ class Chromeless { console.log('Sending keyCode', keyCode, modifiers) await sendKeyCode(client, this.options.useArtificialClick, keyCode, selector, modifiers) }, - args: {keyCode, selector, modifiers}, + args: { + keyCode, + selector: selector || null, + modifiers: modifiers || null, + }, }) return this } @@ -201,19 +255,61 @@ class Chromeless { return this } + public screenshot(outputPath: string): Chromeless { + this.queue.push({ + fn: async (client, outputPath) => { + const value = await screenshot(client, outputPath) + }, + args: {outputPath}, + }) + + return this + } + + public async processJobs(jobs: any[]) { + this.queue = this.deserializeJobs(jobs) + console.log(`Successfully deserialized ${this.queue.length} jobs`) + return this.end() + } + public async end(): Promise { + if (this.options.runRemote) { + return this.processRemote() + } else { + return this.processLocal() + } + } + + private async processRemote() { + console.log('Requesting ' + Chromeless.functionUrl) + const jobs = this.serializeJobs() + const data = await fetch(Chromeless.functionUrl, { + method: 'POST', + body: JSON.stringify({ + jobs: this.getSerializableJobs(), + options: this.options, + }) + }) + + const json = await data.json() + + console.log(json) + if (json.message) { + if (json.message === 'Internal server error') { + console.log('Got internal server error, retrying') + return this.processRemote() + } + throw new Error(`Didn't get the expected response ${json}`) + } + + return json.result + } + + private processLocal() { return new Promise((resolve, reject) => { const process = async () => { - // let jobs = this.queue - let jobs - - try { - const jobsStr = fs.readFileSync('jobs.json') - jobs = this.deserializeJobs(jobsStr) - } catch (e) { - reject(e) - } + const jobs = this.queue for (const job of jobs) { try { @@ -234,33 +330,36 @@ class Chromeless { resolve(this.lastValue) } - if (this.options.runRemote) { - console.log(this.serializeJobs()) - fs.writeFileSync('jobs.json', this.serializeJobs(), 'utf-8') + if (this.client) { + return process() } else { - if (this.client) { - return process() - } else { - this.processCallback = process - } + this.processCallback = process } }) } + public async saveJobs(path) { + const str = this.serializeJobs() + fs.writeFileSync(path, str, 'utf-8') + } + private serializeJobs() { - return JSON.stringify(this.queue.map(job => { + return JSON.stringify(this.getSerializableJobs(), null, 2) + } + + private getSerializableJobs() { + return this.queue.map(job => { return { fn: job.fn.toString(), args: job.args, } - }), null, 2) + }) } - private deserializeJobs(str) { - const jobs = JSON.parse(str) + private deserializeJobs(jobs) { + // const jobs = JSON.parse(str) global['_this'] = this return jobs.map(job => { - console.log('trying to deserialize') const fnString = this.prepareFunction(job) const fn = eval(fnString) return { @@ -285,22 +384,3 @@ class Chromeless { } export default Chromeless - -const daymare = new Chromeless({ - closeTab: false, - runRemote: false, -}) - -console.log('hi') - -daymare - .goto('http://localhost:8064') - .click('#submit') - .wait('div') - .end() - .then((result) => { - console.log('done, result:', result) - }) - .catch(e => { - console.error(e) - }) diff --git a/src/test.ts b/src/test.ts new file mode 100644 index 00000000..3a3df76e --- /dev/null +++ b/src/test.ts @@ -0,0 +1,28 @@ +import Chromeless from './' + + +const chromeless = new Chromeless({ + closeTab: false, + runRemote: false, +}) + +// const jobs = JSON.parse(fs.readFileSync('jobs.json', 'utf-8')) +// const cookies = JSON.parse(fs.readFileSync('cookies.json', 'utf-8')) + +chromeless + .goto('http://localhost:8064') + .click('#submit') + .wait('div') + .screenshot('shot.png') + .end() + .then((result) => { + console.log('done running it remotely result:', result) + }) + .catch(e => { + console.error(e) + }) +// .saveJobs('jobs.json') +// .processJobs(jobs) +// .setCookies(cookies, 'http://localhost:4000') +// .getCookies('http://localhost:4000') +// .evaluate(() => location.href = '/') diff --git a/src/util.ts b/src/util.ts index db88c65f..8e1c3a9a 100644 --- a/src/util.ts +++ b/src/util.ts @@ -1,3 +1,4 @@ +import * as fs from 'fs' // export async function nodeAppears(client, selector) { // // browser code to register and parse mutations // const browserCode = (selector) => { @@ -280,3 +281,36 @@ export async function getValue(client, selector) { } } +export async function getCookies(client, url: string) { + const {Network} = client + + const result = await Network.getCookies([url]) + return result.cookies +} + +export async function setCookies(client, cookies: any[], url) { + const {Network} = client + + for (const cookie of cookies) { + await Network.setCookie({ + ...cookie, + url, + }) + } +} + +export async function clearCookies(client) { + const {Network} = client + + await Network.clearBrowserCookies() +} + +export async function screenshot(client, outputPath) { + const {Page} = client + + const screenshot = await Page.captureScreenshot({format: 'png'}) + const result = screenshot.data + + + fs.writeFileSync(outputPath, result, 'base64') +} diff --git a/tsconfig.json b/tsconfig.json index f771c453..8f4b4260 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,6 @@ "node_modules/*", "src/types/*" ] - }, - "importHelpers": true + } } } \ No newline at end of file diff --git a/tslint.json b/tslint.json index 1dd9f149..a2c9701c 100644 --- a/tslint.json +++ b/tslint.json @@ -54,7 +54,7 @@ ], "no-internal-module": true, "no-trailing-whitespace": true, - "no-null-keyword": true, + "no-null-keyword": false, "prefer-const": true, "jsdoc-format": true } diff --git a/yarn.lock b/yarn.lock index 5bceabf9..32a427c9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -944,6 +944,12 @@ empower-core@^0.6.1: call-signature "0.0.2" core-js "^2.0.0" +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + equal-length@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/equal-length/-/equal-length-1.0.1.tgz#21ca112d48ab24b4e1e7ffc0e5339d31fdfc274c" @@ -1316,6 +1322,10 @@ hullabaloo-config-manager@^1.0.0: pkg-dir "^1.0.0" resolve-from "^2.0.0" +iconv-lite@~0.4.13: + version "0.4.17" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.17.tgz#4fdaa3b38acbc2c031b045d0edcdfe1ecab18c8d" + ignore-by-default@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" @@ -1477,7 +1487,7 @@ is-retry-allowed@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" -is-stream@^1.0.0, is-stream@^1.1.0: +is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -1507,6 +1517,13 @@ isobject@^2.0.0: dependencies: isarray "1.0.0" +isomorphic-fetch@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -1872,6 +1889,13 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" +node-fetch@^1.0.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.1.tgz#899cb3d0a3c92f952c47f1b876f4c8aeabd400d5" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + node-pre-gyp@^0.6.29: version "0.6.36" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786" @@ -2754,6 +2778,10 @@ verror@1.3.6: dependencies: extsprintf "1.0.2" +whatwg-fetch@>=0.10.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + which@^1.2.8, which@^1.2.9: version "1.2.14" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5"