/**
* 获取分页页码
*/
function getPageCount(html) {
const pageMatch = html.match(/共\s*(\d+)\s*页/);
if (pageMatch) {
return parseInt(pageMatch[1]);
}
return 1;
}
/**
* 从HTML中提取图片地址数组
*/
function extractImageUrls(html) {
const jsonMatch = html.match(/let\s+urls\s*=\s*(\[.*?\]);/s);
if (jsonMatch) {
try {
return JSON.parse(jsonMatch[1]);
} catch (e) {
console.error('JSON解析失败:', e);
return [];
}
}
return [];
}
/**
* 主函数:获取所有页面的图片
*/
async function getAllImages(baseUrl) {
const allImages = [];
let pageCount = 1;
try {
// 第一步:获取初始页面,确定总页数
console.log('📖 正在获取初始页面...');
let html = await fetch(baseUrl).then(r => r.text());
pageCount = getPageCount(html);
console.log(`✅ 共找到 ${pageCount} 页`);
// 第二步:逐页获取
for (let page = 1; page <= pageCount; page++) {
// 首页不需要添加 page 参数
const url = page === 1
? baseUrl
: `${baseUrl}&page=${page}`;
console.log(`📄 正在获取第 ${page}/${pageCount} 页: ${url}`);
try {
html = await fetch(url).then(r => r.text());
const images = extractImageUrls(html);
allImages.push(...images);
console.log(` ✓ 此页获得 ${images.length} 张图片,总计 ${allImages.length} 张`);
// 延迟,避免请求过快
await new Promise(resolve => setTimeout(resolve, 500));
} catch (error) {
console.error(` ✗ 第 ${page} 页获取失败:`, error);
}
}
console.log(`\n✨ 完成!共获得 ${allImages.length} 张图片`);
return allImages;
} catch (error) {
console.error('❌ 获取初始页面失败:', error);
return [];
}
}
// 使用示例
const baseUrl = 'https://www.antbyw.com/plugin.php?id=jameson_manhua&a=read&kuid=140724&zjid=756430';
getAllImages(baseUrl).then(images => {
console.log('所有图片地址:', images);
// 你可以在这里对图片进行进一步处理
});
/**
* 带重试机制的版本
*/
async function getAllImagesWithRetry(baseUrl, maxRetries = 3) {
const allImages = [];
let pageCount = 1;
async function fetchWithRetry(url, retries = 0) {
try {
return await fetch(url).then(r => r.text());
} catch (error) {
if (retries < maxRetries) {
console.log(` ⚠️ 重试第 ${retries + 1} 次...`);
await new Promise(resolve => setTimeout(resolve, 1000 * (retries + 1)));
return fetchWithRetry(url, retries + 1);
}
throw error;
}
}
try {
// 获取初始页面
console.log('📖 正在获取初始页面...');
let html = await fetchWithRetry(baseUrl);
pageCount = getPageCount(html);
console.log(`✅ 共找到 ${pageCount} 页`);
// 逐页获取
for (let page = 1; page <= pageCount; page++) {
const url = page === 1
? baseUrl
: `${baseUrl}&page=${page}`;
console.log(`📄 正在获取第 ${page}/${pageCount} 页...`);
try {
html = await fetchWithRetry(url);
const images = extractImageUrls(html);
allImages.push(...images);
console.log(` ✓ ${images.length} 张图片 (总计: ${allImages.length})`);
await new Promise(resolve => setTimeout(resolve, 500));
} catch (error) {
console.error(` ✗ 第 ${page} 页获取失败:`, error.message);
}
}
console.log(`\n✨ 完成!共 ${allImages.length} 张图片`);
return allImages;
} catch (error) {
console.error('❌ 失败:', error);
return [];
}
}