/** * 微博发送 V3 - 带详细错误检查 */ const puppeteer = require('puppeteer-core'); const { getLaunchOptions } = require('../config/browser'); const fs = require('fs'); const COOKIE_FILE = '/home/ubuntu/weibo_cookies.txt'; const TEST_CONTENT = '🤖 自动化测试 ' + Date.now(); const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms)); async function postWeibo() { console.log('🌐 启动浏览器...'); const browser = await puppeteer.launch({ ...getLaunchOptions(), headless: true, }); try { const page = await browser.newPage(); await page.setViewport({ width: 1280, height: 900 }); // 监听控制台日志 page.on('console', msg => { if (msg.type() === 'error') { console.log(' [页面错误]', msg.text()); } }); // 加载 Cookie console.log('🍪 加载 Cookie...'); const cookies = JSON.parse(fs.readFileSync(COOKIE_FILE, 'utf-8')); await page.goto('https://weibo.com', { waitUntil: 'domcontentloaded' }); for (const c of cookies) { try { await page.setCookie({ name: c.name, value: c.value, domain: c.domain, path: c.path || '/' }); } catch (e) {} } // 访问主页 console.log('🔄 访问微博主页...'); await page.goto('https://weibo.com', { waitUntil: 'networkidle2' }); await delay(3000); // 点击"写微博" console.log('🖱️ 点击"写微博"...'); const allBtns = await page.$$('button, a, div[role="button"]'); for (const btn of allBtns) { const text = await page.evaluate(el => el.textContent, btn); if (text?.includes('写微博')) { await btn.click(); console.log(' 已点击'); break; } } await delay(2000); await page.screenshot({ path: '/tmp/weibo_login/v3_compose.png' }); // 查找发布框 console.log('📝 查找发布框...'); let postBox = await page.$('textarea[placeholder*="有什么新鲜事"]'); if (!postBox) { const textareas = await page.$$('textarea'); console.log(` 找到 ${textareas.length} 个 textarea`); if (textareas.length > 0) { postBox = textareas[0]; } } if (!postBox) { throw new Error('未找到发布框'); } // 输入内容 await postBox.click(); await delay(500); await postBox.type(TEST_CONTENT, { delay: 30 }); console.log('✍️ 已输入:', TEST_CONTENT); await delay(1000); await page.screenshot({ path: '/tmp/weibo_login/v3_typed.png' }); // 查找发送按钮 console.log('🔍 查找发送按钮...'); let sendBtn = null; let sendText = ''; const allBtns2 = await page.$$('button, a, div[role="button"]'); for (const btn of allBtns2) { const text = await page.evaluate(el => el.textContent, btn); if (text?.includes('发送') || text?.includes('发布')) { sendBtn = btn; sendText = text.trim(); break; } } if (!sendBtn) { throw new Error('未找到发送按钮'); } console.log(` 找到按钮: "${sendText}"`); // 检查按钮是否可点击 const isEnabled = await page.evaluate(el => { return !el.disabled && !el.getAttribute('disabled'); }, sendBtn); console.log(` 按钮状态: ${isEnabled ? '可用' : '禁用'}`); // 点击前截图 await page.screenshot({ path: '/tmp/weibo_login/v3_before_click.png' }); // 点击发送 console.log('🚀 点击发送...'); await sendBtn.click(); // 等待并检查页面变化 console.log('⏳ 等待响应...'); await delay(5000); // 检查是否有错误提示 const errorMsg = await page.$eval('.error, .W_layer, .tips, [class*="error"]', el => el.textContent).catch(() => null); if (errorMsg) { console.log('⚠️ 页面提示:', errorMsg); } // 检查当前URL const currentUrl = page.url(); console.log('🔗 当前URL:', currentUrl); // 截图 await page.screenshot({ path: '/tmp/weibo_login/v3_after_send.png' }); console.log('📸 已截图'); // 检查最新微博 await page.goto('https://weibo.com/u/me?tabtype=weibo', { waitUntil: 'networkidle2' }); await delay(3000); const posts = await page.evaluate(() => { const items = Array.from(document.querySelectorAll('[class*="card"], [class*="item"]')); return items.slice(0, 2).map(item => { const text = item.textContent || ''; return text.substring(0, 100); }); }); console.log('\n📱 最新微博:'); posts.forEach((p, i) => console.log(` [${i+1}] ${p.substring(0, 80)}...`)); if (posts.some(p => p.includes('自动化测试'))) { console.log('\n✅ 发送成功!'); } else { console.log('\n❌ 未找到刚发的微博,发送可能失败了'); } } catch (error) { console.error('❌ 错误:', error.message); try { await page.screenshot({ path: '/tmp/weibo_login/v3_error.png' }); } catch(e) {} } finally { await browser.close(); } } postWeibo().catch(console.error);