diff --git a/package.json b/package.json index 500bb3f..6f03343 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "azon-seeker", - "displayName": "Azon Seeker v0.7.1.7-beta", + "displayName": "Azon Seeker v0.7.1.8-beta", "version": "0.7.2", "private": true, "description": "Starter modify by honestfox101 and PetrichorFun", diff --git a/src/env.ts b/src/env.ts index c27b5e4..11eeafc 100644 --- a/src/env.ts +++ b/src/env.ts @@ -16,6 +16,7 @@ export const isFirefox = navigator.userAgent.includes('Firefox'); // export const remoteHost = __DEV__ ? '127.0.0.1:8000' : '47.251.4.191:8000'; // export const remoteHost = __DEV__ ? '127.0.0.1:18000' : 'vm8nc3zr-18000.usw2.devtunnels.ms'; -export const remoteHost = __DEV__ ? 'ogsm-dev.rekeymed.com:8888' : 'amzplugin.rekeymed.com'; +// export const remoteHost = __DEV__ ? 'ogsm-dev.rekeymed.com:8888' : 'amzplugin.rekeymed.com'; +export const remoteHost = __DEV__ ? '127.0.0.1:18000' : 'amzplugin.rekeymed.com'; // export const remoteHost = __DEV__ ? '127.0.0.1:18000' : 'amzplugin.rekeymed.com'; // export const remoteHost = '47.251.4.191:8000'; diff --git a/src/page-worker/services/base.ts b/src/page-worker/services/base.ts index b34779b..0ead32c 100644 --- a/src/page-worker/services/base.ts +++ b/src/page-worker/services/base.ts @@ -22,7 +22,16 @@ const httpClient = createAlova({ method.config.headers['x-public-key'] = publicKeyBase64Data; }, responded: { - onSuccess: (response) => response.json(), + // 使用 text() 而不是 json() 来避免 Response body 被重复读取的问题 + // 参考: https://github.com/alovajs/alova/issues/XXX + onSuccess: async (response) => { + const text = await response.text(); + // 检查空响应 + if (!text || text.trim() === '') { + return null; + } + return JSON.parse(text); + }, onError: (response: Response) => { const message = useMessage(); message.error(`HTTP Error: ${response.status}`); diff --git a/src/page-worker/web-injectors/amazon.ts b/src/page-worker/web-injectors/amazon.ts index 520ab70..e30f606 100644 --- a/src/page-worker/web-injectors/amazon.ts +++ b/src/page-worker/web-injectors/amazon.ts @@ -490,9 +490,12 @@ export class AmazonDetailPageInjector extends BaseInjector { public async getImageUrls() { return this.run(async () => { const overlay = document.querySelector('.overlayRestOfImages'); + if (overlay) { + // document.querySelector('#canvasCaption > a')?.click(); if (document.querySelector('#ivThumbs')!.getClientRects().length === 0) { - overlay.click(); + document.querySelector('#canvasCaption > a')?.click(); + // overlay.click(); await new Promise((resolve) => setTimeout(resolve, 1000)); } } @@ -512,7 +515,35 @@ export class AmazonDetailPageInjector extends BaseInjector { /(?<="large":")https:\/\/m.media-amazon.com\/images\/I\/[\w\d\.\-+]+(?=")/g, ); } - document.querySelector('header > [data-action="a-popover-close"]')?.click(); + + // 替换原来的 forEach (第524-537行) + if (urls.length === 0) { + const divs: NodeListOf = + document.querySelectorAll('.ivRow div.ivThumbImage'); + await new Promise((resolve) => setTimeout(resolve, 500 + ~~(500 * Math.random()))); + for (const div of divs) { + // click div com + div.click(); + + // wait for image to load + await new Promise((resolve) => setTimeout(resolve, 100 + ~~(500 * Math.random()))); + + // get img dom + const imgDom = document.querySelector('#ivLargeImage > img'); + + // get url from img dom src attribute + if (imgDom && 'src' in imgDom) { + urls.push(imgDom.src as string); + } + } + } + + // document.querySelector('header > [data-action="a-popover-close"]')?.click(); + // close the image overlay if exists + document + .querySelector('#a-popover-4 > div > div:nth-child(1) > button') + ?.click(); + return urls; }); }