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 +1 -1
- package/scrapers/animesama.js +54 -24
package/package.json
CHANGED
package/scrapers/animesama.js
CHANGED
|
@@ -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
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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
|
-
|
|
140
|
-
|
|
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()))
|
|
147
|
-
|
|
156
|
+
if (blocked.includes(req.resourceType())) {
|
|
157
|
+
req.abort();
|
|
158
|
+
} else {
|
|
159
|
+
req.continue();
|
|
160
|
+
}
|
|
148
161
|
});
|
|
149
162
|
|
|
150
|
-
console.log(
|
|
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
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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(
|
|
193
|
+
console.log("📋 [13] Titres récupérés :", titres);
|
|
168
194
|
return titres;
|
|
195
|
+
|
|
169
196
|
} catch (error) {
|
|
170
|
-
console.error(
|
|
197
|
+
console.error("❌ Erreur dans la récupération des titres :", error);
|
|
171
198
|
return [];
|
|
172
199
|
} finally {
|
|
173
|
-
if (browser)
|
|
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("/")),
|