This commit is contained in:
@@ -3,6 +3,13 @@ const { chromium } = require('playwright');
|
||||
|
||||
const app = express();
|
||||
app.use(express.json());
|
||||
app.use((req, res, next) => {
|
||||
res.header('Access-Control-Allow-Origin', '*');
|
||||
res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
||||
res.header('Access-Control-Allow-Headers', 'Content-Type');
|
||||
if (req.method === 'OPTIONS') return res.sendStatus(204);
|
||||
next();
|
||||
});
|
||||
const PORT = process.env.PORT || 3007;
|
||||
|
||||
app.get('/health', (req, res) => {
|
||||
@@ -36,19 +43,20 @@ app.post('/scrape/indeed', async (req, res) => {
|
||||
await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 20000 });
|
||||
await page.waitForTimeout(2000);
|
||||
|
||||
await page.waitForTimeout(3000);
|
||||
const items = await page.evaluate(() => {
|
||||
const cards = document.querySelectorAll('.job_seen_beacon');
|
||||
return Array.from(cards).slice(0, 8).map(card => {
|
||||
const titleEl = card.querySelector('.jcs-JobTitle');
|
||||
const companyEl = card.querySelector('[data-testid="inlineHeader-companyName"]');
|
||||
const snippetEl = card.querySelector('.job-snippet');
|
||||
const cards = document.querySelectorAll('.job_seen_beacon, [class*="card"], [class*="result"], li');
|
||||
return Array.from(cards).slice(0, 10).map(card => {
|
||||
const titleEl = card.querySelector('.jcs-JobTitle, a[class*="title"], a[class*="job"], h2 a');
|
||||
const companyEl = card.querySelector('[data-testid="inlineHeader-companyName"], [class*="company"], [class*="comp"]');
|
||||
const snippetEl = card.querySelector('.job-snippet, [class*="snippet"], [class*="summary"]');
|
||||
return {
|
||||
title: titleEl?.textContent?.trim() || '',
|
||||
url: titleEl?.href || '',
|
||||
company: companyEl?.textContent?.trim() || '',
|
||||
snippet: snippetEl?.textContent?.trim()?.slice(0, 200) || '',
|
||||
};
|
||||
});
|
||||
}).filter(j => j.title);
|
||||
});
|
||||
|
||||
for (const item of items) {
|
||||
|
||||
+7
-9
@@ -558,12 +558,11 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/playwright": {
|
||||
"version": "1.61.0",
|
||||
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.0.tgz",
|
||||
"integrity": "sha512-Z+7BeeqQPRRzklHsVFP4KTGIyMxKUmfeRA4WisM6G3/XW6nwGeX6fX9qYaDa+CiUqpOkb2f6X3nar05R3kSuJQ==",
|
||||
"license": "Apache-2.0",
|
||||
"version": "1.61.1",
|
||||
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.1.tgz",
|
||||
"integrity": "sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==",
|
||||
"dependencies": {
|
||||
"playwright-core": "1.61.0"
|
||||
"playwright-core": "1.61.1"
|
||||
},
|
||||
"bin": {
|
||||
"playwright": "cli.js"
|
||||
@@ -576,10 +575,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/playwright-core": {
|
||||
"version": "1.61.0",
|
||||
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.0.tgz",
|
||||
"integrity": "sha512-caX7TrY3Ml6egyDX0WUcTHDxodl/b51y5wJOdCEA36QviK/s2g081hvmGs8eaE3DWb6NYZQ6BjO/QkNRPenoPA==",
|
||||
"license": "Apache-2.0",
|
||||
"version": "1.61.1",
|
||||
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.1.tgz",
|
||||
"integrity": "sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==",
|
||||
"bin": {
|
||||
"playwright-core": "cli.js"
|
||||
},
|
||||
|
||||
+17
-16
@@ -23831,6 +23831,7 @@ var init_harTracer = __esm({
|
||||
this._pageEntries = [];
|
||||
this._eventListeners = [];
|
||||
this._started = false;
|
||||
this._omitWebSocketFrames = true;
|
||||
this._context = context2;
|
||||
this._page = page;
|
||||
this._delegate = delegate;
|
||||
@@ -23847,6 +23848,9 @@ var init_harTracer = __esm({
|
||||
this._pageEntrySymbol = Symbol("pageHarEntry");
|
||||
this._baseURL = context2 instanceof APIRequestContext ? context2._defaultOptions().baseURL : context2._options.baseURL;
|
||||
}
|
||||
setOmitWebSocketFrames(omitWebSocketFrames) {
|
||||
this._omitWebSocketFrames = omitWebSocketFrames;
|
||||
}
|
||||
start(options) {
|
||||
if (this._started)
|
||||
return;
|
||||
@@ -24157,7 +24161,7 @@ var init_harTracer = __esm({
|
||||
harEntry._resourceType = "websocket";
|
||||
let sha1 = void 0;
|
||||
const recordMessage = (type3, opcode, data, wallTimeMs) => {
|
||||
if (this._options.omitWebSocketFrames)
|
||||
if (this._omitWebSocketFrames)
|
||||
return;
|
||||
const message = { type: type3, time: this._options.omitTiming ? -1 : wallTimeMs, opcode, data };
|
||||
if (this._options.content === "embed") {
|
||||
@@ -24441,9 +24445,9 @@ var init_harRecorder = __esm({
|
||||
includeTraceInfo: false,
|
||||
recordRequestOverrides: true,
|
||||
waitForContentOnStop: true,
|
||||
urlFilter: urlFilterRe ?? options.urlGlob,
|
||||
omitWebSocketFrames: !!process.env.PLAYWRIGHT_HAR_NO_WEBSOCKET_FRAMES
|
||||
urlFilter: urlFilterRe ?? options.urlGlob
|
||||
});
|
||||
this._tracer.setOmitWebSocketFrames(!!process.env.PLAYWRIGHT_HAR_NO_WEBSOCKET_FRAMES);
|
||||
this._tracer.start({ omitScripts: false });
|
||||
}
|
||||
onEntryStarted(entry) {
|
||||
@@ -24652,8 +24656,7 @@ var init_tracing = __esm({
|
||||
content: "attach",
|
||||
includeTraceInfo: true,
|
||||
recordRequestOverrides: false,
|
||||
waitForContentOnStop: false,
|
||||
omitWebSocketFrames: !!process.env.PLAYWRIGHT_TRACING_NO_WEBSOCKET_FRAMES
|
||||
waitForContentOnStop: false
|
||||
});
|
||||
const testIdAttributeName2 = "selectors" in context2 ? context2.selectors().testIdAttributeName() : void 0;
|
||||
this._contextCreatedEvent = {
|
||||
@@ -24747,6 +24750,7 @@ var init_tracing = __esm({
|
||||
);
|
||||
if (this._state.options.screenshots)
|
||||
this._startScreencast();
|
||||
this._harTracer.setOmitWebSocketFrames(!!process.env.PLAYWRIGHT_TRACING_NO_WEBSOCKET_FRAMES);
|
||||
if (this._state.options.snapshots)
|
||||
await this._snapshotter?.start(progress2);
|
||||
return { traceName: this._state.traceName };
|
||||
@@ -24896,6 +24900,7 @@ var init_tracing = __esm({
|
||||
eventsHelper.removeEventListeners(this._eventListeners);
|
||||
if (this._state.options.screenshots)
|
||||
this._stopScreencast();
|
||||
this._harTracer.setOmitWebSocketFrames(true);
|
||||
if (this._state.options.snapshots)
|
||||
this._snapshotter?.stop();
|
||||
this.flushHarEntries();
|
||||
@@ -35989,7 +35994,7 @@ var init_crNetworkManager = __esm({
|
||||
}
|
||||
_onWebSocketWillSendHandshakeRequest(event) {
|
||||
const wallTimeMs = event.wallTime * 1e3;
|
||||
this._timestampBaselineForWebSocket.set(event.requestId, wallTimeMs - event.timestamp);
|
||||
this._timestampBaselineForWebSocket.set(event.requestId, wallTimeMs - event.timestamp * 1e3);
|
||||
this._page.frameManager.onWebSocketRequest(event.requestId, headersObjectToArray(event.request.headers, "\n"), wallTimeMs);
|
||||
}
|
||||
_onWebSocketClosed(event) {
|
||||
@@ -35997,7 +36002,7 @@ var init_crNetworkManager = __esm({
|
||||
this._page.frameManager.webSocketClosed(event.requestId);
|
||||
}
|
||||
_timestampToWallTimeMsForWebSocket(requestId, timestamp) {
|
||||
return this._timestampBaselineForWebSocket.get(requestId) + timestamp;
|
||||
return this._timestampBaselineForWebSocket.get(requestId) + timestamp * 1e3;
|
||||
}
|
||||
_maybeUpdateRequestSession(sessionInfo, request2) {
|
||||
if (request2.session !== sessionInfo.session && !sessionInfo.isMain && (request2._documentId === request2._requestId || sessionInfo.workerFrame))
|
||||
@@ -44350,15 +44355,11 @@ var init_ffPage = __esm({
|
||||
this._page.frameManager.frameAbortedNavigation(params2.frameId, params2.errorText, params2.navigationId);
|
||||
}
|
||||
_onNavigationCommitted(params2) {
|
||||
if (!params2.navigationId) {
|
||||
this._page.frameManager.frameCommittedSameDocumentNavigation(params2.frameId, params2.url);
|
||||
return;
|
||||
}
|
||||
for (const [workerId, worker] of this._workers) {
|
||||
if (worker.frameId === params2.frameId)
|
||||
this._onWorkerDestroyed({ workerId });
|
||||
}
|
||||
this._page.frameManager.frameCommittedNewDocumentNavigation(params2.frameId, params2.url, params2.name || "", params2.navigationId, false);
|
||||
this._page.frameManager.frameCommittedNewDocumentNavigation(params2.frameId, params2.url, params2.name || "", params2.navigationId || "", false);
|
||||
}
|
||||
_onSameDocumentNavigation(params2) {
|
||||
this._page.frameManager.frameCommittedSameDocumentNavigation(params2.frameId, params2.url);
|
||||
@@ -46941,7 +46942,7 @@ var init_wkPage = __esm({
|
||||
}
|
||||
_onWebSocketWillSendHandshakeRequest(event) {
|
||||
const wallTimeMs = event.walltime * 1e3;
|
||||
this._timestampBaselineForWebSocket.set(event.requestId, wallTimeMs - event.timestamp);
|
||||
this._timestampBaselineForWebSocket.set(event.requestId, wallTimeMs - event.timestamp * 1e3);
|
||||
this._page.frameManager.onWebSocketRequest(event.requestId, headersObjectToArray(event.request.headers), wallTimeMs);
|
||||
}
|
||||
_onWebSocketClosed(event) {
|
||||
@@ -46949,7 +46950,7 @@ var init_wkPage = __esm({
|
||||
this._page.frameManager.webSocketClosed(event.requestId);
|
||||
}
|
||||
_timestampToWallTimeMsForWebSocket(requestId, timestamp) {
|
||||
return this._timestampBaselineForWebSocket.get(requestId) + timestamp;
|
||||
return this._timestampBaselineForWebSocket.get(requestId) + timestamp * 1e3;
|
||||
}
|
||||
async _grantPermissions(origin, permissions) {
|
||||
const webPermissionToProtocol = /* @__PURE__ */ new Map([
|
||||
@@ -49287,7 +49288,7 @@ var init_wvPage = __esm({
|
||||
}
|
||||
_onWebSocketWillSendHandshakeRequest(event) {
|
||||
const wallTimeMs = event.walltime * 1e3;
|
||||
this._timestampBaselineForWebSocket.set(event.requestId, wallTimeMs - event.timestamp);
|
||||
this._timestampBaselineForWebSocket.set(event.requestId, wallTimeMs - event.timestamp * 1e3);
|
||||
this._page.frameManager.onWebSocketRequest(event.requestId, headersObjectToArray(event.request.headers), wallTimeMs);
|
||||
}
|
||||
_onWebSocketClosed(event) {
|
||||
@@ -49295,7 +49296,7 @@ var init_wvPage = __esm({
|
||||
this._page.frameManager.webSocketClosed(event.requestId);
|
||||
}
|
||||
_timestampToWallTimeMsForWebSocket(requestId, timestamp) {
|
||||
return this._timestampBaselineForWebSocket.get(requestId) + timestamp;
|
||||
return this._timestampBaselineForWebSocket.get(requestId) + timestamp * 1e3;
|
||||
}
|
||||
shouldToggleStyleSheetToSyncAnimations() {
|
||||
return true;
|
||||
|
||||
Generated
Vendored
-2
File diff suppressed because one or more lines are too long
+1
-1
@@ -7,7 +7,7 @@
|
||||
<link rel="icon" href="./playwright-logo.svg" type="image/svg+xml">
|
||||
<link rel="manifest" href="./manifest.webmanifest">
|
||||
<title>Playwright Trace Viewer</title>
|
||||
<script type="module" crossorigin src="./index.DEBl1tfz.js"></script>
|
||||
<script type="module" crossorigin src="./index.DMMX1gXU.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="./assets/urlMatch-BYQrIQwR.js">
|
||||
<link rel="modulepreload" crossorigin href="./assets/defaultSettingsView-BNmKHKpQ.js">
|
||||
<link rel="stylesheet" crossorigin href="./defaultSettingsView.CjdS-WJx.css">
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "playwright-core",
|
||||
"version": "1.61.0",
|
||||
"version": "1.61.1",
|
||||
"description": "A high-level API to automate web browsers",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
+3
-2
@@ -869,7 +869,7 @@ function resolve(specifier, context, nextResolve) {
|
||||
const filename = import_url.default.fileURLToPath(context.parentURL);
|
||||
const resolved = resolveHook(filename, specifier);
|
||||
if (resolved !== void 0) {
|
||||
specifier = context.conditions?.includes("import") ? import_url.default.pathToFileURL(resolved).toString() : resolved;
|
||||
specifier = new Set(context.conditions).has("import") ? import_url.default.pathToFileURL(resolved).toString() : resolved;
|
||||
}
|
||||
}
|
||||
const result2 = nextResolve(specifier, context);
|
||||
@@ -894,7 +894,8 @@ function load(moduleUrl, context, nextLoad) {
|
||||
const filename = import_url.default.fileURLToPath(moduleUrl);
|
||||
if (!shouldTransform(filename))
|
||||
return nextLoad(moduleUrl, context);
|
||||
const format = kSupportedFormats.get(context.format) || (fileIsModule(filename) ? "module" : "commonjs");
|
||||
const isRequire = !new Set(context.conditions).has("import");
|
||||
const format = isRequire ? "commonjs" : kSupportedFormats.get(context.format) || (fileIsModule(filename) ? "module" : "commonjs");
|
||||
const code = import_fs5.default.readFileSync(filename, "utf-8");
|
||||
const transformed = transformHook(code, filename, format === "module" ? moduleUrl : void 0);
|
||||
return {
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@
|
||||
1.2 KB packages/playwright/src/common/validators.ts
|
||||
1.3 KB packages/playwright/src/isomorphic/teleReceiver.ts
|
||||
9.6 KB packages/playwright/src/transform/compilationCache.ts
|
||||
1.6 KB packages/playwright/src/transform/esmLoaderSync.ts
|
||||
1.7 KB packages/playwright/src/transform/esmLoaderSync.ts
|
||||
1.1 KB packages/playwright/src/transform/pirates.ts
|
||||
1.1 KB packages/playwright/src/transform/portTransport.ts
|
||||
12.3 KB packages/playwright/src/transform/transform.ts
|
||||
|
||||
+3
-1
@@ -12832,8 +12832,10 @@ function createExpect(info) {
|
||||
if (typeof m !== "function")
|
||||
throw new TypeError(`expect.extend: \`${name}\` is not a valid matcher. Must be a function, is "${typeof m}"`);
|
||||
}
|
||||
Object.assign(info.userMatchers, matchers2);
|
||||
for (const [name, matcher] of Object.entries(matchers2)) {
|
||||
if (name in allBuiltinMatchers)
|
||||
continue;
|
||||
info.userMatchers[name] = matcher;
|
||||
const { positive, inverse } = buildCustomAsymmetricMatcher(name, matcher);
|
||||
expectFn[name] = positive;
|
||||
notAsymmetric[name] = inverse;
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
# packages/playwright/lib/matchers/expect.js
|
||||
# total: 513.8 KB
|
||||
# total: 513.9 KB
|
||||
|
||||
## Inlined (64)
|
||||
7.9 KB node_modules/@babel/code-frame/lib/index.js
|
||||
|
||||
+3
-2
@@ -5629,7 +5629,7 @@ function resolve(specifier, context, nextResolve) {
|
||||
const filename = import_url.default.fileURLToPath(context.parentURL);
|
||||
const resolved = resolveHook(filename, specifier);
|
||||
if (resolved !== void 0) {
|
||||
specifier = context.conditions?.includes("import") ? import_url.default.pathToFileURL(resolved).toString() : resolved;
|
||||
specifier = new Set(context.conditions).has("import") ? import_url.default.pathToFileURL(resolved).toString() : resolved;
|
||||
}
|
||||
}
|
||||
const result2 = nextResolve(specifier, context);
|
||||
@@ -5654,7 +5654,8 @@ function load(moduleUrl, context, nextLoad) {
|
||||
const filename = import_url.default.fileURLToPath(moduleUrl);
|
||||
if (!shouldTransform(filename))
|
||||
return nextLoad(moduleUrl, context);
|
||||
const format = kSupportedFormats.get(context.format) || (fileIsModule(filename) ? "module" : "commonjs");
|
||||
const isRequire = !new Set(context.conditions).has("import");
|
||||
const format = isRequire ? "commonjs" : kSupportedFormats.get(context.format) || (fileIsModule(filename) ? "module" : "commonjs");
|
||||
const code = import_fs4.default.readFileSync(filename, "utf-8");
|
||||
const transformed = transformHook(code, filename, format === "module" ? moduleUrl : void 0);
|
||||
return {
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
# packages/playwright/lib/transform/esmLoader.js
|
||||
# total: 249.0 KB
|
||||
# total: 249.1 KB
|
||||
|
||||
## Inlined (47)
|
||||
1.5 KB node_modules/balanced-match/index.js
|
||||
@@ -40,7 +40,7 @@
|
||||
0.2 KB packages/isomorphic/stringUtils.ts
|
||||
6.3 KB packages/playwright/src/transform/compilationCache.ts
|
||||
3.1 KB packages/playwright/src/transform/esmLoader.ts
|
||||
1.6 KB packages/playwright/src/transform/esmLoaderSync.ts
|
||||
1.7 KB packages/playwright/src/transform/esmLoaderSync.ts
|
||||
1.1 KB packages/playwright/src/transform/pirates.ts
|
||||
1.1 KB packages/playwright/src/transform/portTransport.ts
|
||||
11.7 KB packages/playwright/src/transform/transform.ts
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "playwright",
|
||||
"version": "1.61.0",
|
||||
"version": "1.61.1",
|
||||
"description": "A high-level API to automate web browsers",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -53,7 +53,7 @@
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"playwright-core": "1.61.0"
|
||||
"playwright-core": "1.61.1"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "2.3.2"
|
||||
|
||||
Generated
+8
-10
@@ -9,7 +9,7 @@
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"express": "^4.18.2",
|
||||
"playwright": "^1.48.0"
|
||||
"playwright": "^1.61.1"
|
||||
}
|
||||
},
|
||||
"node_modules/accepts": {
|
||||
@@ -580,12 +580,11 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/playwright": {
|
||||
"version": "1.61.0",
|
||||
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.0.tgz",
|
||||
"integrity": "sha512-Z+7BeeqQPRRzklHsVFP4KTGIyMxKUmfeRA4WisM6G3/XW6nwGeX6fX9qYaDa+CiUqpOkb2f6X3nar05R3kSuJQ==",
|
||||
"license": "Apache-2.0",
|
||||
"version": "1.61.1",
|
||||
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.1.tgz",
|
||||
"integrity": "sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==",
|
||||
"dependencies": {
|
||||
"playwright-core": "1.61.0"
|
||||
"playwright-core": "1.61.1"
|
||||
},
|
||||
"bin": {
|
||||
"playwright": "cli.js"
|
||||
@@ -598,10 +597,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/playwright-core": {
|
||||
"version": "1.61.0",
|
||||
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.0.tgz",
|
||||
"integrity": "sha512-caX7TrY3Ml6egyDX0WUcTHDxodl/b51y5wJOdCEA36QviK/s2g081hvmGs8eaE3DWb6NYZQ6BjO/QkNRPenoPA==",
|
||||
"license": "Apache-2.0",
|
||||
"version": "1.61.1",
|
||||
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.1.tgz",
|
||||
"integrity": "sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==",
|
||||
"bin": {
|
||||
"playwright-core": "cli.js"
|
||||
},
|
||||
|
||||
@@ -8,6 +8,6 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"express": "^4.18.2",
|
||||
"playwright": "^1.48.0"
|
||||
"playwright": "^1.61.1"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user