You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PowerShell实现网站自动登录?(Chrome/Windows10环境)

网站自动登录的PowerShell可行方案

方案一:用Selenium WebDriver模拟浏览器操作(推荐,适配带JS交互的站点)

因为你使用的是Chrome浏览器,这种方式完全模拟人工操作流程,能应对页面动态加载、JS渲染等场景,比Invoke-WebRequest的适配性更强。

操作步骤:

  1. 先安装Selenium PowerShell模块:
Install-Module -Name Selenium -Force -Scope CurrentUser
  1. 下载与你Chrome版本匹配的ChromeDriver,将其放到系统PATH目录,或者后续代码中指定绝对路径。
  2. 编写自动登录脚本:
# 导入Selenium模块
Import-Module Selenium

# 配置ChromeDriver路径(若未放入PATH,需填写完整路径,例如"C:\Tools\chromedriver.exe")
$driverPath = "chromedriver.exe"
$driver = Start-SeChrome -DriverPath $driverPath

# 打开目标登录站点
$driver.Navigate().GoToUrl("https://signin.absolute.com/Default.aspx?ReturnUrl=/SSO/SAML2/SSOService.aspx")

# 等待邮箱输入框加载完成,填入你的邮箱
$emailField = $driver.FindElementById("txtEmailAddress")
$emailField.SendKeys("你的邮箱地址")

# 点击下一步按钮(需根据页面实际HTML调整选择器,这里假设按钮id为btnNext)
$nextBtn = $driver.FindElementById("btnNext")
$nextBtn.Click()

# 等待密码页面加载,填入密码(可改用显式等待替代Sleep,更稳定)
Start-Sleep -Seconds 2
$passwordField = $driver.FindElementById("txtPassword") # 替换为实际密码框的id
$passwordField.SendKeys("你的密码")

# 点击登录按钮(同样需根据页面实际情况调整选择器)
$loginBtn = $driver.FindElementById("btnLogin")
$loginBtn.Click()

# 操作完成后可关闭浏览器
# $driver.Quit()

提示:如果按钮没有id属性,可改用CSS选择器定位,例如$driver.FindElementByCssSelector("button[type='submit']")。

方案二:用Invoke-WebRequest提交表单(仅适合无复杂JS的静态表单)

这种方式无需启动浏览器,但仅适用于纯静态表单提交的站点,若目标站点存在JS动态生成的字段(如CSRF令牌),此方法大概率失效。你之前的尝试错误在于误用了DOM操作方法,Invoke-WebRequest返回的是响应对象,需通过InputFields属性处理表单:

操作步骤:

# 创建会话对象,保持登录状态
$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$site = Invoke-WebRequest -Uri "https://signin.absolute.com/Default.aspx?ReturnUrl=/SSO/SAML2/SSOService.aspx" -WebSession $session

# 找到邮箱输入框对应的字段(匹配name属性)
$emailField = $site.InputFields | Where-Object { $_.Name -eq "ctl00`$bodyContent`$txtEmailAddress" }
$emailField.Value = "你的邮箱地址"

# 提交邮箱表单,进入密码页面
$firstSubmit = Invoke-WebRequest -Uri $site.Forms[0].Action -Method Post -Body $site.InputFields -WebSession $session

# 重复步骤处理密码提交
$passwordField = $firstSubmit.InputFields | Where-Object { $_.Name -eq "ctl00`$bodyContent`$txtPassword" } # 替换为实际密码框的name属性
$passwordField.Value = "你的密码"
$finalSubmit = Invoke-WebRequest -Uri $firstSubmit.Forms[0].Action -Method Post -Body $firstSubmit.InputFields -WebSession $session

你之前尝试的问题说明

  • 你使用$site.document.getElementsByTagName是错误的,Invoke-WebRequest返回的是HtmlWebResponseObject,并非浏览器的DOM对象,无法直接调用DOM操作方法。
  • 查找表单字段需通过$site.InputFields集合,通过Name或Id属性筛选,而非用Contains('id="divlogin"')这类错误方式。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 18:40:58