powershell 如何使用脚本访问网页上的文本,这是身份验证的基础?

qxgroojn  于 2023-04-21  发布在  Shell
关注(0)|答案(2)|浏览(102)

我有一个网站,我可以在登录后查看信息。我需要捕捉显示的东西在脚本中使用。
安装软件不是一个选择-我必须用Windows 10自带的工具来做这件事。
我尝试了Chrome的打印到PDF的功能,但这不适用于身份验证。打印的页面只是登录网址,即使我登录并导航查看我需要的信息。
显然,PowerShell可以使用一个名为wscript的东西来发送击键,突出显示窗口,复制所有内容并将其转储到文本文件中。
我尝试使用postman构建一个查询,让我访问该页面。然而,使用正确的凭据报告:
防伪验证失败
当使用postman时,我注意到当登录页面打开时(在我登录之前)会下载一个cookie。我检查了Firefox中的开发者工具,登录页面提供了这个cookie,称为__H2RequestVerification。当发出登录请求时,浏览器会使用用户名,密码和这个cookie(这是一个很长的随机字母和数字字符串)进行POST。
我尝试在postman中手动执行此操作,但当我到达提供凭据的部分时,总是得到"connection reset" error,即使在cookie中提供令牌也是如此。
来自Postman的原始请求,以curl格式(这不起作用):

curl --location 'https://data-demo.xxx.ac.uk/account/login?ReturnUrl=%2F' \
--header 'Host:  data-demo.xxx.ac.uk' \
--header 'User-Agent:  Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0' \
--header 'Accept:  text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8' \
--header 'Accept-Language:  en-GB,en;q=0.5' \
--header 'Accept-Encoding:  gzip, deflate, br' \
--header 'Content-Type:  application/x-www-form-urlencoded' \
--header 'Content-Length:  182' \
--header 'Origin:  https://data-demo.xxx.ac.uk' \
--header 'DNT:  1' \
--header 'Connection:  keep-alive' \
--header 'Referer:  https://data-demo.xxx.ac.uk/account/login?ReturnUrl=%2F' \
--header 'Cookie:  __H2RequestVerification=Wj3e8tH-8ikvaghOBS0k5x0Vd9X74CRhVRw5Ch9BgNwLIkfGYNI0Do9stFyI0B0yVoq6BQIeJZTGqApRs8Tb3tx0sMg1' \
--header 'Upgrade-Insecure-Requests:  1' \
--header 'Sec-Fetch-Dest:  document' \
--header 'Sec-Fetch-Mode:  navigate' \
--header 'Sec-Fetch-Site:  same-origin' \
--header 'Sec-Fetch-User:  ?1' \
--header 'Sec-GPC:  1' \
--header 'TE:  trailers' \
--form '__RequestVerificationToken="JtyADE1k-gov_-IYAGMh4urwLI0GK32wlltEZUPetV2TPSMpLE1vY7L8qBkn-Z9sWfcQl9vZfWukq04C55Oj9cFBRkU1"' \
--form 'EmailOrUsername="abc@123"' \
--form '.xxx="aPassWord"'

我不知道如何从Firefox中复制原始HTTP请求,但我认为一定有一种方法。
以下是标题:

Host: data-demo.xxx.ac.uk
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 182
Origin: https://data-demo.xxx.ac.uk
DNT: 1
Connection: keep-alive
Referer: https://data-demo.xxx.ac.uk/account/login
Cookie: __H2RequestVerification=Wj3e8tH-8ikvaghOBS0k5x0Vd9X74CRhVRw5Ch9BgNwLIkfGYNI0Do9stFyI0B0yVoq6BQIeJZTGqApRs8Tb3tx0sMg1
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Sec-GPC: 1
TE: trailers

下面是formdata:

__RequestVerificationToken  "u9tHCizsNnw0iZ4olHk5gt7gAqMCDEDrcQvZWM08TdT-U10NRfuEU2B8leZ4TU5Eq8UzE8YsfEemwvr8xCcHnVFJKnU1"
EmailOrUsername "123@abc"
Password    "aPassWord"

关于cookie:

__H2RequestVerification "Wj3e8tH-8ikvaghOBS0k5x0Vd9X74CRhVRw5Ch9BgNwLIkfGYNI0Do9stFyI0B0yVoq6BQIeJZTGqApRs8Tb3tx0sMg1"
gstyhher

gstyhher1#

为了让防伪验证失败之类的东西检测到你的尝试,网站在初始页面加载后使用JavaScript加载数据。
抓取这样的网站的唯一方法是使用一个使用Selenium(see this question)驱动真实的浏览器的程序。
如果不安装Selenium或其他可以在页面上运行JavaScript的软件,您就无法做到这一点。

7vux5j2d

7vux5j2d2#

你确实可以使用Selenium,这里有一个想法:

$ChromeOptions = New-Object OpenQA.Selenium.Chrome.ChromeOptions
$ChromeOptions.addargument('--log-level=3') #Quiet mode
$ChromeOptions.addargument('--kiosk-printing') #Enable automatically pressing the print button in print preview.
$myMap = @{}
$myMap.Add("default_directory", "$downloadpath") #set you default download path
$ChromeOptions.AddUserProfilePreference("download", $myMap)
$driver = New-Object OpenQA.Selenium.Chrome.ChromeDriver($ChromeOptions)

Enter-SeUrl -url $your_url -driver $driver
foreach ($cookie in $cookies) { Set-SeCookie -Name $cookie[0] -Value $cookie[1] -target $driver}
Start-Sleep 10
$driverbis.executescript("document.title='$nameyouwant'; window.print();")

相关问题