使用Power Query抓取PubChem时遭遇「需启用JavaScript」错误的解决咨询
Power BI访问PubChem时JS禁用提示问题的成因与解决办法
成因
- PubChem反爬机制更新:平台调整了访问验证逻辑,现在要求访问环境必须能执行JavaScript才能返回正常内容,你之前用的Web.BrowserContents默认环境被识别为无JS支持或非真实浏览器。
- Power BI浏览器模拟参数问题:Web.BrowserContents的默认配置可能未启用JS,或者模拟的浏览器特征(如User-Agent)被PubChem的检测机制拦截。
- 局部节点/网络限制:你提到是局部问题,可能当前访问的PubChem服务器节点对JS检测更严格,或者所在网络的防火墙、代理干扰了JS环境的模拟。
可行解决办法
1. 调整Web.BrowserContents的JS与浏览器模拟设置
修改你的M代码,强制启用JS执行、增加页面加载等待时间,并模拟真实浏览器的User-Agent:
let Source = Web.BrowserContents("https://pubchem.ncbi.nlm.nih.gov/compound/311", [WaitFor=10, EnableJavaScript=true, UserAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"]), #"Extracted Table From Html" = Html.Table(Source, {{"Column1", "BODY"}}), Column1 = #"Extracted Table From Html"[Column1]{0} in Column1
- 说明:
EnableJavaScript=true确保JS能正常执行,WaitFor=10给页面留足加载JS内容的时间,真实的User-Agent能降低被识别为爬虫的概率。
2. 改用PubChem官方API(推荐)
PubChem提供REST API接口,比网页抓取更稳定合规,完全避开JS检测问题。比如获取CID 311的化合物信息:
let Source = Json.Document(Web.Contents("https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/311/JSON")), CompoundInfo = Source{"PC_Compounds"}{0} in CompoundInfo
- 说明:API返回结构化的JSON数据,无需处理复杂的HTML,数据获取更高效,也符合平台的使用规范。
3. 排查网络环境
- 切换网络环境(比如从办公网换为家用网络),排除防火墙或代理对JS模拟的干扰。
- 清除Power BI的Web缓存:依次点击「文件」>「选项和设置」>「查询选项」>「数据加载」>「清除缓存」。
相关参考问题(翻译自Stack Overflow)
Selenium Chrome驱动程序在网页上执行JS脚本时存在不一致性
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

