haixunMaster/scripts/debug-search-steps.ts

46 lines
1.8 KiB
TypeScript

import { prisma } from "../lib/db";
import { createContext } from "../lib/threads-browser/browser";
async function main() {
const account = await prisma.account.findFirst({ orderBy: { updatedAt: "desc" } });
if (!account) return;
const context = await createContext(account.storageState, true);
const page = await context.newPage();
let jsonHits = 0;
page.on("response", async (response) => {
const url = response.url();
if (!url.includes("graphql") && !url.includes("threads") && !url.includes("instagram")) return;
try {
const ct = response.headers()["content-type"] ?? "";
if (!ct.includes("json")) return;
const text = await response.text();
if (text.includes("caption") || text.includes("thread_items")) jsonHits++;
} catch {}
});
const searchUrl = `https://www.threads.com/search?q=${encodeURIComponent("備孕")}&serp_type=default`;
await page.goto(searchUrl, { waitUntil: "domcontentloaded", timeout: 60000 });
await page.waitForTimeout(2000);
console.log("After goto:", page.url());
console.log("Body has 404?:", (await page.locator("body").innerText()).includes("走丟"));
for (let i = 0; i < 5; i++) {
await page.mouse.wheel(0, 1200);
await page.waitForTimeout(1500);
}
const articles = await page.locator('div[role="article"]').count();
const posts = await page.locator('a[href*="/post/"]').count();
const pressable = await page.locator('[data-pressable-container="true"]').count();
const dirAuto = await page.locator('div[dir="auto"]').count();
console.log({ articles, posts, pressable, dirAuto, jsonHits });
const scripts = await page.locator('script[type="application/json"][data-sjs]').count();
console.log("script tags:", scripts);
await context.close();
}
main().catch(console.error);