49 lines
2.2 KiB
TypeScript
49 lines
2.2 KiB
TypeScript
import { createDriver } from '../drivers/factory';
|
|
import * as fs from 'fs';
|
|
|
|
(async () => {
|
|
const driver = createDriver();
|
|
await driver.createSession();
|
|
const KW = process.env.AIR_PURIFIER_CARD || 'Air Purifier';
|
|
try {
|
|
await driver.dismissPopupIfPresent();
|
|
await driver.goBackToHomepage();
|
|
await new Promise((r) => setTimeout(r, 1000));
|
|
// 找卡片并点中心
|
|
let el: string | null = null;
|
|
for (let i = 0; i < 8; i++) {
|
|
el = await driver.findElementRaw('-android uiautomator', `new UiSelector().textContains("${KW}")`).catch(() => null);
|
|
if (el) break;
|
|
await driver.swipe(540, 1400, 540, 600, 0.4).catch(() => {});
|
|
await new Promise((r) => setTimeout(r, 900));
|
|
}
|
|
if (!el) throw new Error('找不到卡片');
|
|
const rect = await driver.getElementRect(el);
|
|
console.log(`卡片文本 rect=(${rect.x},${rect.y}) ${rect.width}x${rect.height}`);
|
|
await driver.tap(rect.x + rect.width / 2, rect.y + rect.height / 2);
|
|
await new Promise((r) => setTimeout(r, 2500));
|
|
|
|
const size = await driver.getWindowSize();
|
|
console.log(`屏幕 ${size.width}x${size.height}`);
|
|
const src = await driver.getSource();
|
|
const texts = Array.from(src.matchAll(/text="([^"]+)"/g)).map((m) => m[1]).filter((t) => t.trim());
|
|
console.log('=== 浮层文本节点 ===');
|
|
console.log(JSON.stringify([...new Set(texts)], null, 0));
|
|
|
|
// 把带 bounds 的可点节点也 dump 出来(找无文案电源键的可能容器)
|
|
const nodes = Array.from(src.matchAll(/<[^>]*?(?:text="([^"]*)")?[^>]*?(?:content-desc="([^"]*)")?[^>]*?clickable="true"[^>]*?bounds="(\[\d+,\d+\]\[\d+,\d+\])"[^>]*?>/g));
|
|
console.log('=== clickable 节点(text|desc|bounds) ===');
|
|
for (const n of nodes.slice(0, 40)) console.log(` "${n[1] || ''}" | "${n[2] || ''}" | ${n[3]}`);
|
|
|
|
const ss = await driver.screenshot();
|
|
fs.writeFileSync('/tmp/airpurifier_popup.png', Buffer.from(ss, 'base64'));
|
|
console.log('截图: /tmp/airpurifier_popup.png');
|
|
} catch (e: any) {
|
|
console.error('探针失败:', e.message);
|
|
const ss = await driver.screenshot().catch(() => '');
|
|
if (ss) fs.writeFileSync('/tmp/airpurifier_popup.png', Buffer.from(ss, 'base64'));
|
|
} finally {
|
|
await driver.destroySession();
|
|
}
|
|
})();
|