better-ani-scraped 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "better-ani-scraped",
3
- "version": "1.2.1",
3
+ "version": "1.2.2",
4
4
  "description": "Scrape anime data from different sources (only anime-sama.fr for the moment)",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -125,56 +125,76 @@ export async function getSeasons(animeUrl, language = "vostfr") {
125
125
  }
126
126
 
127
127
  export async function getEpisodeTitles(animeUrl) {
128
- const puppeteer = await import('puppeteer');
129
128
  let browser;
130
-
131
129
  try {
132
- browser = await puppeteer.launch({
133
- headless: true,
134
- args: ['--no-sandbox', '--disable-setuid-sandbox']
135
- });
130
+ console.log("🔧 [1] Lancement de Puppeteer...");
131
+ browser = await puppeteer.launch({
132
+ headless: true,
133
+ args: ['--no-sandbox', '--disable-setuid-sandbox']
134
+ });
136
135
 
137
- const page = await browser.newPage();
136
+ console.log("🌐 [2] Création d'une nouvelle page...");
137
+ const page = await browser.newPage();
138
138
 
139
- await page.setUserAgent(
140
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
141
- );
139
+ console.log("🔐 [3] Configuration des headers...");
140
+ await page.setExtraHTTPHeaders({
141
+ "User-Agent": "Mozilla/5.0",
142
+ "Accept-Language": "fr-FR,fr;q=0.9,en;q=0.8",
143
+ Referer: animeUrl,
144
+ });
142
145
 
143
- await page.setRequestInterception(true);
144
- page.on('request', (req) => {
145
- const blocked = ['image', 'stylesheet', 'font', 'media'];
146
- if (blocked.includes(req.resourceType())) req.abort();
147
- else req.continue();
148
- });
146
+ console.log("🚫 [4] Blocage des ressources inutiles...");
147
+ await page.setRequestInterception(true);
148
+ page.on('request', (req) => {
149
+ const blocked = ['image', 'stylesheet', 'font', 'media'];
150
+ if (blocked.includes(req.resourceType())) {
151
+ req.abort();
152
+ } else {
153
+ req.continue();
154
+ }
155
+ });
149
156
 
150
- console.log("▶️ Navigation vers", animeUrl);
151
- await page.goto(animeUrl, { waitUntil: 'domcontentloaded', timeout: 20000 });
157
+ console.log(`🌍 [5] Chargement de la page : ${animeUrl}`);
158
+ await page.goto(animeUrl, { waitUntil: 'domcontentloaded', timeout: 20000 });
159
+ console.log("✅ [6] Page chargée.");
152
160
 
153
- try {
154
- await page.waitForSelector('#selectEpisodes', { timeout: 7000 });
155
- } catch (waitError) {
156
- console.warn("⚠️ Sélecteur #selectEpisodes introuvable :", waitError.message);
161
+ console.log("⏳ [7] Attente du sélecteur #selectEpisodes...");
162
+ await page.waitForSelector('#selectEpisodes', { timeout: 10000 });
163
+ console.log("✅ [8] Sélecteur trouvé.");
157
164
 
158
- const htmlDump = await page.content();
159
- require("fs").writeFileSync("debug_selectEpisodes.html", htmlDump);
160
- return [];
161
- }
165
+ console.log("📸 [9] Screenshot pour debug...");
166
+ const screenshotPath = path.resolve(`debug-${Date.now()}.png`);
167
+ await page.screenshot({ path: screenshotPath });
168
+ console.log("📷 Screenshot enregistré :", screenshotPath);
162
169
 
163
- const titres = await page.$$eval('#selectEpisodes option', options =>
164
- options.map(o => o.textContent.trim())
165
- );
170
+ console.log("📄 [10] Sauvegarde du HTML...");
171
+ const html = await page.content();
172
+ fs.writeFileSync(path.resolve(`page-${Date.now()}.html`), html);
173
+
174
+ console.log("🔍 [11] Vérification existence du select...");
175
+ const selectExists = await page.$('#selectEpisodes') !== null;
176
+ console.log("#selectEpisodes existe :", selectExists);
177
+
178
+ console.log("🧠 [12] Récupération des titres d'épisodes...");
179
+ const titres = await page.$$eval('#selectEpisodes option', options =>
180
+ options.map(o => o.textContent.trim())
181
+ );
182
+
183
+ console.log("📋 [13] Titres récupérés :", titres);
184
+ return titres;
166
185
 
167
- console.log(`✅ ${titres.length} titres récupérés`);
168
- return titres;
169
186
  } catch (error) {
170
- console.error('❌ Erreur dans getEpisodeTitles:', error.message);
171
- return [];
187
+ console.error("❌ Erreur dans la récupération des titres :", error);
188
+ return [];
172
189
  } finally {
173
- if (browser) await browser.close();
190
+ if (browser) {
191
+ console.log("🧹 [14] Fermeture du navigateur...");
192
+ await browser.close();
193
+ }
194
+ console.log("✅ [15] Fin de la fonction getEpisodeTitles.");
174
195
  }
175
196
  }
176
197
 
177
-
178
198
  export async function getEmbed(animeUrl, hostPriority = ["vidmoly"]) {
179
199
  const res = await axios.get(animeUrl, {
180
200
  headers: getHeaders(animeUrl.split("/").slice(0, 5).join("/")),