You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让PowerShell的Invoke-WebRequest自动拒绝Cookie?

解决Invoke-WebRequest自动拒绝Cookie的问题

遇到这种需要手动确认Cookie的情况确实很烦人,尤其是需要无人值守运行脚本的时候。这里有几个靠谱的解决方法,你可以根据自己的场景选择:

方法1:使用-UseBasicParsing跳过IE引擎的交互提示

如果目标网站的链接是静态渲染的(不需要JavaScript生成),最简单的办法就是给Invoke-WebRequest加上-UseBasicParsing参数。这个参数会绕过Internet Explorer的DOM解析引擎,也就不会触发Cookie同意的弹窗提示,直接获取页面内容。

示例代码:

$iwr = (Invoke-WebRequest -Uri $categoryLink -UseBasicParsing).Links.Href

方法2:预先添加拒绝Cookie的会话Cookie

如果网站依赖JavaScript渲染链接,必须使用IE引擎的话,你可以预先构造一个包含"拒绝Cookie"指令的Web会话。大多数网站会用特定的Cookie来记录用户的Cookie同意状态,比如常见的cookieconsent_status,值设为deny就表示拒绝非必要Cookie。

步骤如下:

  1. 手动访问目标网站,打开浏览器的开发者工具(F12),查看Cookie列表,找到记录Cookie同意状态的键值对(比如cookieconsent_status=deny)。
  2. 在脚本中创建自定义WebSession,添加这个Cookie:
# 初始化一个空的Web会话
$webSession = New-Object Microsoft.PowerShell.Commands.WebRequestSession

# 添加拒绝Cookie的设置,注意替换为目标网站实际的Cookie键值和域名
$cookie = New-Object System.Net.Cookie(
    "cookieconsent_status",  # Cookie名称
    "deny",                  # Cookie值(拒绝)
    "/",                     # 路径
    ([System.Uri]$categoryLink).Host  # 目标网站域名
)
$webSession.Cookies.Add($cookie)

# 使用这个会话发起请求
$iwr = (Invoke-WebRequest -Uri $categoryLink -WebSession $webSession).Links.Href

注意:不同网站的Cookie名称可能不一样,比如有些用gdpr_consentcc_denied等,一定要先确认目标网站的实际Cookie键值再替换。

不推荐的全局设置方法

还有一种方式是修改IE的Internet选项,在"隐私"设置里禁用Cookie提示,但这是全局设置,会影响所有使用IE的程序,所以除非你确定不会有其他影响,否则不建议这么做。

内容的提问来源于stack exchange,提问作者thoudamchitaranjan

火山引擎 最新活动