使用w3m查询dle.rae.es西班牙词典遇Cloudflare验证报错如何解决
你遇到的是Cloudflare浏览器安全验证拦截,该站点要求客户端支持JavaScript执行并完成校验后才能返回页面内容。w3m作为纯文本浏览器默认不支持JS运行,因此无法通过验证,仅修改UA、手动传递cookie无法绕过这类需要JS执行的校验逻辑。
可行解决方案
方案1:使用Cloudflare专用绕过工具重构查询脚本(推荐)
该方案适配性强,修改后可以直接沿用你之前的defes 单词的使用习惯:
- 首先安装依赖组件:
pip3 install cfscrape beautifulsoup4
cfscrape是专门针对Cloudflare五秒盾的绕过工具,可自动完成JS验证、获取有效会话凭证;beautifulsoup4用于过滤页面冗余内容,只输出你需要的单词释义。
2. 替换原有defes脚本的全部内容为:
#!/bin/bash # 西班牙皇家语言学院词典终端查询工具 if [ -z "$1" ]; then echo "用法:defes <待查询的西班牙语单词>" exit 1 fi python3 - << EOF import cfscrape from bs4 import BeautifulSoup # 创建绕过Cloudflare验证的请求对象 scraper = cfscrape.create_scraper() resp = scraper.get(f"https://dle.rae.es/$1") if resp.status_code != 200: print(f"查询失败,请求状态码:{resp.status_code}") exit() # 解析页面,只提取释义内容 soup = BeautifulSoup(resp.text, "html.parser") for entry in soup.find_all("div", class_="entry"): print(entry.get_text("\n", strip=True)) print("-" * 60) EOF
- 给修改后的脚本添加执行权限:
chmod +x /path/to/defes
配置完成后即可直接使用defes casa这类命令查询单词,释义会直接格式化输出到终端。
如果后续站点升级验证规则导致cfscrape失效,可以替换为Playwright无头浏览器工具,它支持完整的JavaScript执行能力,能够模拟普通浏览器的全部交互逻辑完成验证,适配性更强。
方案2:复用本地浏览器的验证会话(适合需要保留w3m使用习惯的场景)
你可以先在本地的普通桌面浏览器(Chrome、Firefox等)中访问一次dle.rae.es,手动完成验证后,用浏览器开发者工具导出该站点的有效cookie,将cookie内容按照w3m的格式规范写入~/.w3m/cookie文件,之后调用w3m时携带该cookie即可绕过验证。需要注意Cloudflare的会话cookie存在有效期,过期后需要重新导出替换。
内容的提问来源于stack exchange,提问作者Unix
相关产品推荐
相关产品推荐

