const { chromium } = require('playwright');
const fs = require('fs');
const path = require('path');
const os = require('os');
const { execSync } = require('child_process');
async function extractContent() {
const originalUserDataDir = '/Users/cyh/Library/Application Support/Google/Chrome';
const tempUserDataDir = path.join(os.homedir(), '.cueward', 'playwright_profile');
try {
console.log("Preparing isolated Chrome profile for Playwright...");
execSync(`mkdir -p "${tempUserDataDir}/Default"`);
execSync(`cp "${originalUserDataDir}/Local State" "${tempUserDataDir}/" 2>/dev/null || true`);
execSync(`rsync -a --include='Cookies*' --include='Preferences' --include='Network*' --exclude='*' "${originalUserDataDir}/Default/" "${tempUserDataDir}/Default/" 2>/dev/null || true`);
console.log("Launching local Chrome with isolated profile...");
const context = await chromium.launchPersistentContext(tempUserDataDir, {
executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
headless: true, viewport: { width: 1280, height: 800 },
args: [
'--disable-blink-features=AutomationControlled', ]
});
const page = await context.newPage();
console.log("Navigating to Threads...");
await page.setExtraHTTPHeaders({
'Accept-Language': 'zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7',
});
await page.goto('https://www.threads.net/@pycun_yyy/post/DWti4h6D2qA', { waitUntil: 'networkidle' });
console.log("Waiting for content to render...");
await page.waitForTimeout(5000);
const content = await page.evaluate(() => {
const article = document.querySelector('div[data-pressable-container="true"]');
return article ? article.innerText : document.body.innerText;
});
console.log("\n--- Extracted Content (Playwright PoC) ---");
console.log(content.substring(0, 500) + "...\n");
await context.close();
} catch (error) {
console.error("Failed:", error.message);
}
}
extractContent();