如何用PowerShell实现谷歌搜索?遇Cookie弹窗无法获取结果
问题原因
谷歌的Cookie合规机制会拦截未携带「同意Cookie」的请求,直接返回Cookie授权页面。Invoke-WebRequest默认不会自动处理这种授权流程,所以无法直接获取搜索结果。
解决方案1:模拟Cookie同意流程
通过PowerShell的会话功能,先完成Cookie同意的提交,再携带授权后的Cookie请求搜索页面:
# 创建Web会话,用于保存Cookie $webSession = New-Object Microsoft.PowerShell.Commands.WebRequestSession # 先访问谷歌首页,获取初始会话Cookie Invoke-WebRequest -Uri "https://www.google.com" -WebSession $webSession | Out-Null # 构造Cookie同意的提交参数(参数可能随谷歌页面更新变化,需注意) $consentParams = @{ gl = "US" m = "0" pc = "srp" continue = "https://www.google.com/search?q=Test" accept = "true" set_eom = "true" } # 提交同意请求,更新会话中的Cookie Invoke-WebRequest -Uri "https://consent.google.com/save" -Method Post -WebSession $webSession -Body $consentParams | Out-Null # 携带授权Cookie请求搜索页面 $searchResponse = Invoke-WebRequest -Uri "https://www.google.com/search?q=Test" -WebSession $webSession # 输出搜索结果的HTML内容(可自行提取所需信息) $searchResponse.Content
注意事项
- 谷歌的Cookie同意接口参数可能随时调整,如果上述代码失效,需要手动抓包获取最新的提交参数。
- 建议添加
User-Agent头模拟浏览器请求,避免被识别为爬虫:$headers = @{ "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } # 在Invoke-WebRequest中加入 -Headers $headers 参数
解决方案2:使用谷歌自定义搜索API(更稳定)
如果不想处理Cookie的问题,推荐使用谷歌官方的自定义搜索JSON API,这种方式无需处理授权墙,且返回结构化数据:
- 前往谷歌开发者平台创建API密钥和自定义搜索引擎ID。
- 使用PowerShell发送请求:
这种方法有免费额度(每月100次查询免费),超出后需付费。$apiKey = "你的API密钥" $engineId = "你的搜索引擎ID" $query = "Test" $response = Invoke-RestMethod -Uri "https://www.googleapis.com/customsearch/v1?q=$query&key=$apiKey&cx=$engineId" # 输出搜索结果标题和链接 $response.items | ForEach-Object { Write-Host "标题: $($_.title)" Write-Host "链接: $($_.link)`n" }
内容的提问来源于stack exchange,提问作者wanncool
相关产品推荐
相关产品推荐

