如何用VBA QuerySelector提取指定网站href?原代码失效求助
问题分析与修复方案
你的代码存在几个关键问题,导致无法正确获取目标页面内容:
1. 请求方法错误
目标页面是通过GET请求访问的(原URL带有查询参数),但你误用了POST方法,这会让服务器返回非预期的内容。
2. Referer头设置方式错误
你把Referer的URL当作POST请求体发送了,正确的做法是通过setRequestHeader来设置Referer请求头,而非放在send参数里。
3. 缺少必要请求头
多数网站会验证User-Agent字段判断请求是否来自合法浏览器,你的代码未设置该头,很大概率被服务器拦截,返回空或非目标页面内容。
修正后的代码
Function CheckIfAccess() Dim html As MSHTML.HTMLDocument, xhr As Object Dim URL As String, RefString As String, CountItems As Long Set html = New MSHTML.HTMLDocument Set xhr = CreateObject("MSXML2.ServerXMLHTTP.6.0") URL = "https://www.zvg-portal.de/index.php?button=showZvg&zvg_id=5972&land_abk=br" RefString = "https://www.zvg-portal.de/index.php?button=Suchen" With xhr .Open "GET", URL, False ' 模拟浏览器请求头 .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" .setRequestHeader "Referer", RefString .send ' 先判断响应是否有效 If .responseText <> "" Then html.body.innerHTML = .responseText Else MsgBox "服务器返回空内容,可能被拦截" Exit Function End If End With CountItems = html.querySelectorAll("a").length MsgBox CountItems End Function
额外说明
如果修正后仍无法获取内容,说明网站启用了更严格的反爬机制(比如Cookie验证、JS渲染或IP限制),这种情况下ServerXMLHTTP难以绕过,建议改用Selenium这类模拟真实浏览器的工具来获取页面内容。
内容的提问来源于stack exchange,提问作者Jasco
相关产品推荐
相关产品推荐

