浏览器查看的HTML与VBA获取的HTML不一致,原因是什么?
为什么VBA获取的HTML和Chrome查看的源代码不一致?
主要有这几个原因:
动态内容未被渲染:Chrome打开页面时会自动执行页面中的JavaScript代码,动态加载、生成页面内容(比如参会者列表这类数据,很可能是页面加载后通过JS异步请求获取并渲染出来的)。而
MSXML2.ServerXMLHTTP只是直接获取服务器返回的原始静态HTML,不会执行任何JavaScript,自然拿不到那些动态生成的内容,两者的HTML结构和内容就会有差异。请求头不匹配:浏览器发送请求时会携带一系列请求头信息,比如
User-Agent(告诉服务器这是Chrome浏览器)、Cookie(如果有登录会话)、Accept等。而VBA里的MSXML2.ServerXMLHTTP默认的请求头非常简单,服务器可能会根据请求头识别请求来源,给浏览器返回完整的渲染页面,给非浏览器请求返回简化版内容或者纯数据接口,导致返回的HTML不一样。会话状态不同:如果该页面需要登录才能查看完整的参会者信息,Chrome中可能已经保存了你的登录Cookie,所以能显示完整内容。但VBA的请求没有携带这些登录Cookie,服务器会返回未登录状态下的HTML,内容自然和登录后的页面不同。
服务器的反爬或内容策略:部分网站会对非浏览器的请求做拦截或返回不同内容,
MSXML2.ServerXMLHTTP的请求容易被识别为非浏览器请求,服务器可能会返回简化版页面、提示验证的页面,甚至直接拒绝请求,导致获取的HTML和浏览器看到的不一致。
内容的提问来源于stack exchange,提问作者Brooks
相关产品推荐
相关产品推荐

