-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Puppetter #77
Comments
windows 11 启动后自动打开浏览器播放音频[没有限制]新建 vite react 项目pnpm create vite
音频文件src\assets\纵贯线-公路.mp3 音频播放组件
import React, { useEffect, useRef } from "react";
import AudioFile from "../assets/纵贯线-公路.mp3";
export const AutoPlayAudio: React.FC = () => {
// 使用泛型来指定引用元素的类型
const audioRef = useRef<HTMLAudioElement | null>(null);
useEffect(() => {
// 确保引用元素存在后再尝试播放音频
if (audioRef.current) {
audioRef.current.play().catch((error) => {
console.error("自动播放失败,可能需要用户交互", error);
});
}
}, []);
return (
<div>
<audio ref={audioRef} controls>
<source src={AudioFile} type="audio/mpeg" />
您的浏览器不支持 audio 元素。
</audio>
</div>
);
};
使用组件
import './App.css'
import { AutoPlayAudio } from './components/AutoPlayAudio'
function App() {
return (
<>
<AutoPlayAudio />
</>
)
}
export default App puppeteer安装pnpm i puppeteer -S
pnpm i npm-run-all -S 打开 puppeteer ,访问本地网页播放音频 脚本
import puppeteer from 'puppeteer';
(async () => {
// 启动浏览器,并禁用自动播放限制
const browser = await puppeteer.launch({
headless: false, // 使用无头模式(设置为 true 则浏览器窗口不可见)
args: ['--autoplay-policy=no-user-gesture-required'] // 禁用自动播放限制
});
// 打开新页面
const page = await browser.newPage();
// 导航到需要播放音频的网页
await page.goto('http://localhost:5173/', { waitUntil: 'networkidle2' });
// 使用 JavaScript 直接触发播放
await page.evaluate(() => {
// 获取音频元素
const audio = document.querySelector('audio');
if (audio) {
audio.play().catch((error) => {
console.error('自动播放失败', error);
});
} else {
console.error('找不到音频元素');
}
});
// 使用 setTimeout 进行等待
//await new Promise(resolve => setTimeout(resolve, 10000)); // 等待 10 秒
// 关闭浏览器
//await browser.close();
})(); package.json关键脚本
{
"name": "vite-audio",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"lint": "eslint .",
"preview": "vite preview",
"play": "node src/script/auto-play.js",
"start-all": "npm-run-all --parallel dev play"
},
"dependencies": {
"npm-run-all": "^4.1.5",
"puppeteer": "^23.7.0",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
"devDependencies": {
"@eslint/js": "^9.13.0",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@vitejs/plugin-react-swc": "^3.5.0",
"eslint": "^9.13.0",
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-react-refresh": "^0.4.14",
"globals": "^15.11.0",
"typescript": "~5.6.2",
"typescript-eslint": "^8.11.0",
"vite": "^5.4.10"
}
}
windows 启动执行bash 命令脚本
@echo off
timeout /t 10
cd /d D:\test\vite-audio
npm run start-all > start_log.txt 2>&1
pause
使用 pause 命令防止脚本立即关闭,以便查看可能的错误信息 添加启动延迟 将输出重定向到日志文件以帮助调试 将脚本添加到 Windows 启动目录,以便在系统启动时自动运行。按下 Win + R 键,输入 将 |
Puppeteer 尺寸或全屏在使用 Puppeteer 打开浏览器时,可以通过设置浏览器窗口的尺寸来实现“全屏”的效果,或者通过模拟按下全屏快捷键。以下是两种常用的方法: 方法 1:设置浏览器窗口尺寸为全屏您可以通过 const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: false, // 确保浏览器不是无头模式
args: [
'--start-maximized', // 启动时最大化窗口
],
});
const page = await browser.newPage();
// 设置页面视口大小为全屏
await page.setViewport({
width: 1920, // 设置为您的屏幕宽度
height: 1080, // 设置为您的屏幕高度
});
// 在此执行页面操作
await page.goto('https://example.com');
// 浏览器操作...
// 关闭浏览器
// await browser.close();
})(); 解释:
方法 2:使用 JavaScript 模拟按键进入全屏模式您还可以通过在页面上运行 JavaScript 代码,模拟按下键盘快捷键来使页面进入全屏模式。以下是一个简单的方法: const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: false,
defaultViewport: null,
});
const page = await browser.newPage();
await page.goto('https://example.com');
// 使用页面脚本模拟全屏
await page.evaluate(() => {
document.documentElement.requestFullscreen().catch(err => {
console.error(`Error attempting to enable full-screen mode: ${err.message}`);
});
});
// 浏览器操作...
// 关闭浏览器
// await browser.close();
})(); 解释:
方法 3:模拟按键 F11(Windows 系统)您也可以使用 Puppeteer 模拟按下键盘上的 F11 键,通常这会触发浏览器的全屏模式。 const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: false,
defaultViewport: null,
});
const page = await browser.newPage();
await page.goto('https://example.com');
// 模拟按下 F11 键进入全屏模式
await page.keyboard.press('F11');
// 浏览器操作...
// 关闭浏览器
// await browser.close();
})(); 总结
您可以根据您的具体需求和使用场景选择合适的方法来实现 Puppeteer 浏览器的自动全屏效果。 |
Puppeteer 绕过限制Puppeteer 确实能够控制 Chromium 浏览器(或 Chrome),并通过模拟用户操作的方式绕过一些常规浏览器的限制,例如自动播放视频、禁用弹窗等。但是,它并不能完全无视所有的浏览器安全策略或限制。以下是 Puppeteer 对于自动播放和一些浏览器限制的处理方式: 1. 自动播放(AutoPlay)现代浏览器对于自动播放音视频内容会有所限制,特别是对于带有声音的视频,通常需要用户交互才能播放。这是为了减少未经用户允许的内容打扰。然而,Puppeteer 可以通过指定一些启动参数来绕过这些限制。 例如,可以使用以下参数来启用自动播放: const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: false,
args: [
'--autoplay-policy=no-user-gesture-required' // 允许自动播放
]
});
const page = await browser.newPage();
await page.goto('https://example.com');
// 此处可以执行更多页面操作,例如播放视频
// await page.click('video');
// 关闭浏览器
// await browser.close();
})(); 解释:
2. 绕过浏览器权限限制Puppeteer 也可以模拟用户的操作来绕过某些权限提示。例如,它可以自动接受位置请求或允许通知。对于很多浏览器中的权限限制,Puppeteer 可以通过 await page.setPermission('geolocation', 'granted'); 这样,可以在页面加载时自动授权地理位置访问。 3. 禁用弹出窗口和广告在 Puppeteer 中可以通过在启动浏览器时添加一些配置参数来禁用一些常见的弹出窗口、广告或其他干扰项。例如: const browser = await puppeteer.launch({
headless: false,
args: [
'--disable-popup-blocking', // 禁用弹窗拦截
'--no-sandbox', // 在沙盒环境下运行
'--disable-infobars', // 禁用“Chrome 正在受到自动化软件的控制”的信息栏
]
}); 4. CSP(内容安全策略)限制有些网页启用了内容安全策略(CSP),可能会限制某些类型的操作,比如内嵌脚本执行或者外部资源加载。Puppeteer 可以通过以下方式禁用 CSP 以绕过这些限制: await page.setBypassCSP(true); 这样,页面就可以绕过内容安全策略加载一些被限制的资源。 5. 自动处理浏览器权限对话框对于一些浏览器权限请求(如麦克风、摄像头、地理位置等),可以通过页面的事件监听来自动处理对话框: page.on('dialog', async dialog => {
await dialog.accept(); // 自动接受对话框
}); 6. 禁用 WebRTC 限制WebRTC(实时通信)会暴露用户的 IP 地址。在 Puppeteer 中,你可以通过添加一些启动参数来禁用这个特性: const browser = await puppeteer.launch({
headless: false,
args: [
'--disable-webrtc' // 禁用 WebRTC,防止 IP 泄露
]
}); 总结Puppeteer 确实能够通过指定一些启动参数、脚本操作等绕过大部分的浏览器限制,包括自动播放视频、弹窗处理、内容安全策略等。然而,它并不能完全绕过所有安全策略,例如某些严格的浏览器内置的安全策略或需要特殊条件触发的用户操作。通过合理配置 Puppeteer 的选项,大多数浏览器限制确实可以较为容易地被自动化脚本绕过。 |
Puppetter
安装
npm config set puppeteer_download_host=https://storage.googleapis.com.cnpmjs.org
The text was updated successfully, but these errors were encountered: