-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
107 lines (87 loc) · 2.61 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
"use strict";
import { default as puppeteer } from "puppeteer";
import { exec } from "child_process";
// Check ENV
if (
!process.env.BRD_CUSTOMER ||
!process.env.ZONE ||
!process.env.PASSWORD ||
!process.env.TARGET
) {
console.error("Missing environment variables");
process.exit(1);
}
/**
* Get a Scraping Browser instance
* @param {String} [country]
*/
async function getScrapingBrowser(country) {
const BROWSER_AUTH = `brd-customer-${process.env.BRD_CUSTOMER}-zone-${
process.env.ZONE
}${country ? `-country-${country}` : ""}:${process.env.PASSWORD}`;
const BROWSER_WS_ENDPOINT = `wss://${BROWSER_AUTH}@${process.env.TARGET}`;
const browser = await puppeteer.connect({
browserWSEndpoint: BROWSER_WS_ENDPOINT,
});
return browser;
}
/**
* Get a page instance
* @param {import('puppeteer').Browser} browser
* @returns
*/
async function getPage(browser) {
const page = await browser.newPage();
const client = await page.createCDPSession();
return { page, client };
}
/**
* Open Chrome devtools (debug locally only)
* @param {import('puppeteer').Page} page
* @param {import('puppeteer').CDPSession} client
*/
async function openDebugger(page, client) {
if (process.env.NODE_ENV === "production") {
return;
}
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
const openDevtools = async (page, client) => {
// get current frameId
const frameId = page.mainFrame()._id;
// get URL for devtools from scraping browser
const { url: inspectUrl } = await client.send("Page.inspect", { frameId });
// open devtools URL in local chrome
exec(`start chrome "${inspectUrl}"`, (error) => {
if (error) console.error("Unable to open devtools: " + error);
});
// wait for devtools ui to load
await delay(5000);
};
await openDevtools(page, client);
}
// Main
const url =
"https://www.vvf.fr/villages-vacances/vacances-moliets-vvf-villages.html?startDate=2025-07-05&endDate=2025-07-12&adult=2&children=0&baby=0&animal=0";
let browser;
(async () => {
try {
browser = await getScrapingBrowser();
const { page, client } = await getPage(browser);
await openDebugger(page, client);
const pageResponse = await page.goto(url, {
timeout: 120000,
waitUntil: "domcontentloaded",
});
console.log(pageResponse.status());
// Wait for the page to load
await page.waitForSelector(".searchBar-submitBtn:not(.isLoading)");
console.log("Search button found");
// End for now
await browser.close();
process.exit(0);
} catch (e) {
console.error(e);
browser?.close();
process.exit;
}
})();