项目初始化

This commit is contained in:
ray
2026-04-13 18:09:52 +08:00
commit aa67b0e37e
22 changed files with 2959 additions and 0 deletions

View 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);