如何使用Playwright Python修改浏览器时钟?
使用Playwright Python修改浏览器时钟
完全可以通过Playwright Python实现修改浏览器时钟,核心是利用Playwright的脚本注入能力,在页面中覆盖原生的Date相关方法——和你了解的JavaScript方案逻辑一致,但无需手动转换代码后单独执行,直接通过Python API就能完成。
初始化时固定时钟(页面加载前生效)
如果希望页面一加载就使用自定义时间,推荐用add_init_script注入初始化脚本,这样页面内所有依赖时间的逻辑都会优先使用你设定的时间:
from playwright.sync_api import sync_playwright def set_fixed_browser_time(): with sync_playwright() as p: browser = p.chromium.launch(headless=False) # 目标时间的时间戳(毫秒),示例为2023-10-01 12:00:00 target_ts = 1696142400000 # 注入覆盖Date的脚本 browser.add_init_script(f""" const originalDate = Date; // 重写无参数的Date构造 Date = function(...args) {{ return args.length === 0 ? new originalDate({target_ts}) : new originalDate(...args); }}; // 复制原生静态方法并修改now() Object.assign(Date, originalDate); Date.now = () => {target_ts}; """) page = browser.new_page() page.goto("https://example.com") # 验证时间是否生效 current_page_time = page.evaluate("new Date().toString()") print("页面当前时间:", current_page_time) browser.close() set_fixed_browser_time()
页面加载后动态修改时钟
如果需要在页面运行过程中调整时间,用page.evaluate执行修改脚本即可:
# 在页面加载完成后执行这段代码 new_target_ts = 1698734400000 # 示例为2023-10-31 12:00:00 page.evaluate(f""" const originalDate = Date; Date = function(...args) {{ return args.length === 0 ? new originalDate({new_target_ts}) : new originalDate(...args); }}; Object.assign(Date, originalDate); Date.now = () => {new_target_ts}; """) # 验证修改结果 updated_time = page.evaluate("new Date().toString()") print("修改后页面时间:", updated_time)
注意事项
- 这种方式会覆盖页面内所有原生
Date调用,包括第三方脚本的时间逻辑,能模拟系统时钟修改的效果。 - 部分网站会校验客户端时间与服务器时间的差值,这种客户端修改方式可能无法绕过这类校验。
内容的提问来源于stack exchange,提问作者KiwiNFLFan
相关产品推荐
相关产品推荐

