a
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
/**
|
||||
* 微博登录助手 V2 - 直接访问登录页面
|
||||
*/
|
||||
|
||||
const puppeteer = require('puppeteer-core');
|
||||
const { getLaunchOptions } = require('../config/browser');
|
||||
const fs = require('fs');
|
||||
|
||||
const PHONE = process.argv[2] || '18688929976';
|
||||
const SCREENSHOT_DIR = '/tmp/weibo_login';
|
||||
|
||||
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
||||
|
||||
if (!fs.existsSync(SCREENSHOT_DIR)) {
|
||||
fs.mkdirSync(SCREENSHOT_DIR, { recursive: true });
|
||||
}
|
||||
|
||||
async function weiboLogin() {
|
||||
console.log('🌐 正在打开微博登录页面...');
|
||||
|
||||
const browser = await puppeteer.launch({
|
||||
...getLaunchOptions(),
|
||||
headless: true,
|
||||
});
|
||||
|
||||
try {
|
||||
const page = await browser.newPage();
|
||||
await page.setViewport({ width: 1280, height: 900 });
|
||||
|
||||
// 直接访问登录页面
|
||||
await page.goto('https://weibo.com/newlogin?tabtype=weibo', {
|
||||
waitUntil: 'networkidle2',
|
||||
timeout: 60000,
|
||||
});
|
||||
|
||||
console.log('✅ 登录页面加载完成');
|
||||
await delay(3000);
|
||||
await page.screenshot({ path: `${SCREENSHOT_DIR}/login_page.png` });
|
||||
console.log('📸 已截图');
|
||||
|
||||
// 查找并点击短信登录选项卡
|
||||
const tabs = await page.$$('div[role="tab"], .tab, [class*="tab"]');
|
||||
console.log(`找到 ${tabs.length} 个选项卡`);
|
||||
|
||||
for (const tab of tabs) {
|
||||
const text = await page.evaluate(el => el.textContent, tab);
|
||||
console.log(` 选项卡: "${text?.trim()}"`);
|
||||
if (text && text.includes('短信')) {
|
||||
console.log('🖱️ 点击短信登录选项卡');
|
||||
await tab.click();
|
||||
await delay(2000);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
await page.screenshot({ path: `${SCREENSHOT_DIR}/after_tab.png` });
|
||||
|
||||
// 查找手机号输入框
|
||||
console.log('📱 查找手机号输入框...');
|
||||
const phoneInput = await page.$('input[type="tel"], input[placeholder*="手机号"], input[name="phone"]');
|
||||
|
||||
if (phoneInput) {
|
||||
await phoneInput.type(PHONE, { delay: 50 });
|
||||
console.log(`✅ 手机号已输入: ${PHONE}`);
|
||||
} else {
|
||||
// 尝试所有输入框
|
||||
const inputs = await page.$$('input');
|
||||
console.log(`尝试 ${inputs.length} 个输入框...`);
|
||||
for (const input of inputs) {
|
||||
const placeholder = await page.evaluate(el => el.placeholder, input);
|
||||
const type = await page.evaluate(el => el.type, input);
|
||||
console.log(` input type=${type} placeholder="${placeholder}"`);
|
||||
if (type === 'tel' || (placeholder && placeholder.includes('手机'))) {
|
||||
await input.type(PHONE, { delay: 50 });
|
||||
console.log(`✅ 手机号已输入: ${PHONE}`);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
await page.screenshot({ path: `${SCREENSHOT_DIR}/phone_entered.png` });
|
||||
|
||||
// 查找获取验证码按钮
|
||||
console.log('🔍 查找"获取验证码"按钮...');
|
||||
const buttons = await page.$$('button, a, div[role="button"]');
|
||||
let codeBtn = null;
|
||||
|
||||
for (const btn of buttons) {
|
||||
const text = await page.evaluate(el => el.textContent, btn);
|
||||
if (text && (text.includes('获取') || text.includes('验证码') || text.includes('code'))) {
|
||||
console.log(` 找到按钮: "${text.trim()}"`);
|
||||
codeBtn = btn;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (codeBtn) {
|
||||
console.log('🖱️ 点击获取验证码按钮...');
|
||||
await codeBtn.click();
|
||||
console.log('✅ 已发送验证码请求');
|
||||
await delay(3000);
|
||||
await page.screenshot({ path: `${SCREENSHOT_DIR}/code_requested.png` });
|
||||
} else {
|
||||
console.log('⚠️ 未找到验证码按钮');
|
||||
}
|
||||
|
||||
console.log('\n' + '='.repeat(60));
|
||||
console.log('📋 步骤完成,当前状态:');
|
||||
console.log(` 手机号: ${PHONE}`);
|
||||
console.log(` 验证码: ⏳ 等待发送...`);
|
||||
console.log('\n📸 截图文件:');
|
||||
fs.readdirSync(SCREENSHOT_DIR).forEach(f => {
|
||||
console.log(` - ${SCREENSHOT_DIR}/${f}`);
|
||||
});
|
||||
console.log('\n📱 请检查手机 18688929976');
|
||||
console.log('收到验证码后告诉我,格式: 验证码 123456');
|
||||
console.log('='.repeat(60));
|
||||
|
||||
// 保存浏览器状态供后续使用
|
||||
const cookies = await page.cookies();
|
||||
fs.writeFileSync(`${SCREENSHOT_DIR}/cookies_step1.json`, JSON.stringify(cookies, null, 2));
|
||||
|
||||
// 保持运行等待验证码
|
||||
await new Promise(() => {});
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 错误:', error.message);
|
||||
await browser.close();
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
weiboLogin().catch(console.error);
|
||||
Reference in New Issue
Block a user