项目初始化
This commit is contained in:
135
aliyun-sync/aliyun-aps-sync/src/debug-pagination.js
Normal file
135
aliyun-sync/aliyun-aps-sync/src/debug-pagination.js
Normal file
@@ -0,0 +1,135 @@
|
||||
import { chromium } from 'playwright';
|
||||
import { config, datasets } from './config.js';
|
||||
|
||||
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
||||
|
||||
console.log('打开订单页面,设置2024-11月,探测分页结构...');
|
||||
|
||||
const context = await chromium.launchPersistentContext(config.userDataDir, {
|
||||
channel: 'chrome',
|
||||
headless: false,
|
||||
acceptDownloads: true,
|
||||
downloadsPath: config.downloadDir,
|
||||
});
|
||||
|
||||
const page = context.pages()[0] || (await context.newPage());
|
||||
await page.goto(datasets.orders.url, { waitUntil: 'domcontentloaded' });
|
||||
|
||||
await page.waitForFunction(
|
||||
(text) => document.body && document.body.innerText.includes(text),
|
||||
datasets.orders.heading,
|
||||
{ timeout: 60000 },
|
||||
);
|
||||
await sleep(3000);
|
||||
|
||||
// 设置日期到2024-11月(数据多的月份)
|
||||
const trigger = page.locator('input[placeholder="结束日期"]');
|
||||
await trigger.click();
|
||||
await sleep(1000);
|
||||
const panelEndInput = page.locator('.next-range-picker-panel-input-end-date input');
|
||||
await panelEndInput.click();
|
||||
await sleep(100);
|
||||
await page.keyboard.press('Control+A');
|
||||
await page.keyboard.type('2024-11-30', { delay: 30 });
|
||||
await sleep(300);
|
||||
const panelStartInput = page.locator('.next-range-picker-panel-input-start-date input');
|
||||
await panelStartInput.click();
|
||||
await sleep(100);
|
||||
await page.keyboard.press('Control+A');
|
||||
await page.keyboard.type('2024-11-01', { delay: 30 });
|
||||
await sleep(300);
|
||||
await page.keyboard.press('Enter');
|
||||
await sleep(500);
|
||||
await page.mouse.click(0, 0);
|
||||
await sleep(300);
|
||||
await page.keyboard.press('Escape');
|
||||
await sleep(1000);
|
||||
|
||||
// 点查询
|
||||
const queryBtn = page.locator('button:has-text("查询")').first();
|
||||
await queryBtn.click();
|
||||
await sleep(3000);
|
||||
|
||||
// 探测分页组件
|
||||
const paginationInfo = await page.evaluate(() => {
|
||||
const result = {
|
||||
// 找所有 pagination 相关的元素
|
||||
paginationContainers: [],
|
||||
allButtons: [],
|
||||
nextItems: [],
|
||||
};
|
||||
|
||||
// 所有 pagination 容器
|
||||
const containers = document.querySelectorAll('[class*="pagination"]');
|
||||
containers.forEach((el, i) => {
|
||||
result.paginationContainers.push({
|
||||
index: i,
|
||||
tag: el.tagName,
|
||||
className: el.className.substring(0, 200),
|
||||
childCount: el.children.length,
|
||||
innerHTML: el.innerHTML.substring(0, 500),
|
||||
});
|
||||
});
|
||||
|
||||
// 所有带 next-btn 类名的按钮(在 pagination 内)
|
||||
const btns = document.querySelectorAll('[class*="pagination"] button, [class*="pagination"] [role="button"], [class*="pagination"] .next-btn');
|
||||
btns.forEach((el, i) => {
|
||||
result.allButtons.push({
|
||||
index: i,
|
||||
tag: el.tagName,
|
||||
text: el.innerText?.trim()?.substring(0, 50) || '',
|
||||
className: el.className.substring(0, 200),
|
||||
disabled: el.hasAttribute('disabled') || el.getAttribute('aria-disabled') === 'true',
|
||||
ariaLabel: el.getAttribute('aria-label') || '',
|
||||
});
|
||||
});
|
||||
|
||||
// 找 next-next 类
|
||||
const nextNextEls = document.querySelectorAll('.next-next, [class*="next-next"]');
|
||||
nextNextEls.forEach((el, i) => {
|
||||
result.nextItems.push({
|
||||
index: i,
|
||||
tag: el.tagName,
|
||||
text: el.innerText?.trim()?.substring(0, 50) || '',
|
||||
className: el.className.substring(0, 200),
|
||||
disabled: el.hasAttribute('disabled'),
|
||||
parentClass: el.parentElement?.className?.substring(0, 100) || '',
|
||||
});
|
||||
});
|
||||
|
||||
return result;
|
||||
});
|
||||
|
||||
console.log('\n=== Pagination 容器 ===');
|
||||
for (const c of paginationInfo.paginationContainers) {
|
||||
console.log(`\n[容器 ${c.index}] <${c.tag}> children=${c.childCount}`);
|
||||
console.log(` class: ${c.className}`);
|
||||
console.log(` html: ${c.innerHTML.substring(0, 300)}`);
|
||||
}
|
||||
|
||||
console.log('\n=== Pagination 内的按钮 ===');
|
||||
for (const b of paginationInfo.allButtons) {
|
||||
console.log(`[btn ${b.index}] <${b.tag}> text="${b.text}" disabled=${b.disabled} aria="${b.ariaLabel}" class="${b.className}"`);
|
||||
}
|
||||
|
||||
console.log('\n=== next-next 元素 ===');
|
||||
for (const n of paginationInfo.nextItems) {
|
||||
console.log(`[next ${n.index}] <${n.tag}> text="${n.text}" disabled=${n.disabled} class="${n.className}" parent="${n.parentClass}"`);
|
||||
}
|
||||
|
||||
// 再看看当前页码
|
||||
const currentPage = await page.evaluate(() => {
|
||||
const active = document.querySelector('.next-pagination-item.current, .next-pagination-list .current');
|
||||
return active ? { text: active.innerText, class: active.className } : null;
|
||||
});
|
||||
console.log('\n当前页码:', currentPage);
|
||||
|
||||
// 看看总共多少条记录的提示
|
||||
const totalInfo = await page.evaluate(() => {
|
||||
const el = document.querySelector('[class*="pagination"]');
|
||||
return el ? el.innerText : '(无)';
|
||||
});
|
||||
console.log('分页文本:', totalInfo);
|
||||
|
||||
await context.close();
|
||||
process.exit(0);
|
||||
Reference in New Issue
Block a user