103 lines
3.3 KiB
JavaScript
Raw Normal View History

2026-05-20 21:39:12 +08:00
const { chromium } = require('playwright');
const fs = require('fs');
const path = require('path');
async function solveCaptchaAndSavePdf() {
// 启动手机模式浏览器
const browser = await chromium.launch({ headless: true });
const context = await browser.newContext({
viewport: { width: 375, height: 812 },
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/1AE148',
deviceScaleFactor: 3,
isMobile: true,
hasTouch: true
});
const page = await context.newPage();
try {
// 访问目标网页
console.log('正在访问网页...');
await page.goto('https://www.schrss.org.cn/scggfwApp/cbzmyz/toPage.do?code=Au4JWUwufsRpfGrEp42G');
await page.waitForTimeout(3000);
console.log('页面标题:', await page.title());
// 获取页面快照,查看验证码元素
const snapshot = await page.content();
console.log('页面内容长度:', snapshot.length);
// 查找验证码图片
const captchaImg = await page.locator('img').first();
if (captchaImg) {
const captchaPath = path.join(__dirname, 'captcha_verify.png');
await captchaImg.screenshot({ path: captchaPath });
console.log('验证码已保存到:', captchaPath);
}
// 获取验证码图片的base64
const captchaBase64 = await page.evaluate(() => {
const img = document.querySelector('img');
if (img) {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
canvas.width = img.width;
canvas.height = img.height;
ctx.drawImage(img, 0, 0);
return canvas.toDataURL('image/png');
}
return null;
});
if (captchaBase64) {
const base64Data = captchaBase64.replace(/^data:image\/\w+;base64,/, '');
fs.writeFileSync(path.join(__dirname, 'captcha_base64.png'), Buffer.from(base64Data, 'base64'));
console.log('验证码base64图片已保存');
}
// 打印页面中所有图片的src
const imgSrcs = await page.evaluate(() => {
return [...document.querySelectorAll('img')].map(img => ({
src: img.src,
alt: img.alt,
width: img.width,
height: img.height
}));
});
console.log('页面中的图片:', JSON.stringify(imgSrcs, null, 2));
// 查找输入框和提交按钮
const inputs = await page.locator('input').all();
console.log('输入框数量:', inputs.length);
const buttons = await page.locator('button').all();
console.log('按钮数量:', buttons.length);
// 查找表单元素
const formInfo = await page.evaluate(() => {
const form = document.querySelector('form');
if (form) {
return {
action: form.action,
method: form.method
};
}
return null;
});
console.log('表单信息:', formInfo);
// 等待一下,确保页面完全加载
await page.waitForTimeout(2000);
// 获取完整的页面快照
const bodyHtml = await page.evaluate(() => document.body.innerHTML);
console.log('Body HTML (前2000字符):', bodyHtml.substring(0, 2000));
} catch (error) {
console.error('错误:', error.message);
} finally {
await browser.close();
}
}
solveCaptchaAndSavePdf();