better-ani-scraped 1.2.1 → 1.2.3

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.3",
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,86 @@ 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
+ try {
131
+ console.log("🔧 [1] Lancement de Puppeteer...");
132
+ browser = await puppeteer.launch({
133
+ headless: true,
134
+ args: ['--no-sandbox', '--disable-setuid-sandbox'],
135
+ });
136
+ console.log("✅ [1.1] Puppeteer lancé avec succès :", !!browser);
137
+ } catch (launchError) {
138
+ console.error("❌ [1.2] Échec du lancement de Puppeteer :", launchError);
139
+ return [];
140
+ }
136
141
 
142
+ console.log("🌐 [2] Création d'une nouvelle page...");
137
143
  const page = await browser.newPage();
138
144
 
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
- );
145
+ console.log("🔐 [3] Configuration des headers...");
146
+ await page.setExtraHTTPHeaders({
147
+ "User-Agent": "Mozilla/5.0",
148
+ "Accept-Language": "fr-FR,fr;q=0.9,en;q=0.8",
149
+ Referer: animeUrl,
150
+ });
142
151
 
152
+ console.log("🚫 [4] Blocage des ressources inutiles...");
143
153
  await page.setRequestInterception(true);
144
154
  page.on('request', (req) => {
145
155
  const blocked = ['image', 'stylesheet', 'font', 'media'];
146
- if (blocked.includes(req.resourceType())) req.abort();
147
- else req.continue();
156
+ if (blocked.includes(req.resourceType())) {
157
+ req.abort();
158
+ } else {
159
+ req.continue();
160
+ }
148
161
  });
149
162
 
150
- console.log("▶️ Navigation vers", animeUrl);
163
+ console.log(`🌍 [5] Chargement de la page : ${animeUrl}`);
151
164
  await page.goto(animeUrl, { waitUntil: 'domcontentloaded', timeout: 20000 });
165
+ console.log("✅ [6] Page chargée.");
152
166
 
153
- try {
154
- await page.waitForSelector('#selectEpisodes', { timeout: 7000 });
155
- } catch (waitError) {
156
- console.warn("⚠️ Sélecteur #selectEpisodes introuvable :", waitError.message);
167
+ console.log("⏳ [7] Attente du sélecteur #selectEpisodes...");
168
+ await page.waitForSelector('#selectEpisodes', { timeout: 10000 });
169
+ console.log("✅ [8] Sélecteur trouvé.");
157
170
 
158
- const htmlDump = await page.content();
159
- require("fs").writeFileSync("debug_selectEpisodes.html", htmlDump);
160
- return [];
161
- }
171
+ const timestamp = Date.now();
172
+ const screenshotPath = path.resolve(`debug-${timestamp}.png`);
173
+ const htmlPath = path.resolve(`page-${timestamp}.html`);
174
+
175
+ console.log("📸 [9] Screenshot pour debug...");
176
+ await page.screenshot({ path: screenshotPath });
177
+ console.log("📷 Screenshot enregistré :", screenshotPath);
178
+
179
+ console.log("📄 [10] Sauvegarde du HTML...");
180
+ const html = await page.content();
181
+ fs.writeFileSync(htmlPath, html);
182
+ console.log("💾 HTML sauvegardé :", htmlPath);
162
183
 
184
+ console.log("🔍 [11] Vérification existence du select...");
185
+ const selectExists = await page.$('#selectEpisodes') !== null;
186
+ console.log("#selectEpisodes existe :", selectExists);
187
+
188
+ console.log("🧠 [12] Récupération des titres d'épisodes...");
163
189
  const titres = await page.$$eval('#selectEpisodes option', options =>
164
190
  options.map(o => o.textContent.trim())
165
191
  );
166
192
 
167
- console.log(`✅ ${titres.length} titres récupérés`);
193
+ console.log("📋 [13] Titres récupérés :", titres);
168
194
  return titres;
195
+
169
196
  } catch (error) {
170
- console.error('❌ Erreur dans getEpisodeTitles:', error.message);
197
+ console.error("❌ Erreur dans la récupération des titres :", error);
171
198
  return [];
172
199
  } finally {
173
- if (browser) await browser.close();
200
+ if (browser) {
201
+ console.log("🧹 [14] Fermeture du navigateur...");
202
+ await browser.close();
203
+ }
204
+ console.log("✅ [15] Fin de la fonction getEpisodeTitles.");
174
205
  }
175
206
  }
176
207
 
177
-
178
208
  export async function getEmbed(animeUrl, hostPriority = ["vidmoly"]) {
179
209
  const res = await axios.get(animeUrl, {
180
210
  headers: getHeaders(animeUrl.split("/").slice(0, 5).join("/")),