收到预请求而非目标请求,无法获取目标ASCII艺术文本求助
问题根源:客户端渲染在搞鬼!
嘿,这个情况我太熟了!你直接用函数发请求拿到的只是网站的「静态骨架HTML」,而那些炫酷的Graffiti风格ASCII字母,是浏览器加载完页面后,由页面里的JavaScript代码根据你传的t=test和f=Graffiti参数动态生成并插入到页面里的。你的请求没触发JS执行,自然看不到最终的ASCII内容啦。
两种靠谱的解决办法
1. 模拟浏览器跑JS(最省心)
直接启动一个无头浏览器(就是没有可视化界面的浏览器),让它像真实用户访问一样加载页面、执行JS,之后再扒出渲染好的内容。举个Python的例子用playwright(比selenium更轻量):
from playwright.sync_api import sync_playwright with sync_playwright() as p: # 启动无头Chrome browser = p.chromium.launch(headless=True) page = browser.new_page() # 访问目标链接 page.goto("http://patorjk.com/software/taag/#p=display&f=Graffiti&t=test") # 等ASCII内容加载出来(用浏览器开发者工具能找到这个元素的ID) page.wait_for_selector("#asciiArtOutput") # 获取文本内容 ascii_text = page.locator("#asciiArtOutput").inner_text() print(ascii_text) browser.close()
Node.js的话可以用puppeteer,逻辑完全一样。
2. 抓包直接调用API(更高效)
如果你不想启动浏览器,也可以打开浏览器的开发者工具(F12),切换到「Network」面板,刷新页面后找一找有没有专门生成ASCII的接口——比如可能是个带text=test、font=Graffiti参数的请求,直接调用这个接口就能拿到纯ASCII文本,完全不用管JS渲染。
小提醒
用第一种方法的时候,一定要加等待元素加载的代码(比如上面的wait_for_selector),不然可能JS还没生成完内容,你就急着拿结果,还是会空的。
内容的提问来源于stack exchange,提问作者NewNewton
相关产品推荐
相关产品推荐

