我有一个网站,我可以在登录后查看信息。我需要捕获一些显示在脚本中使用的内容。
安装软件不是一个选项-我必须用windows 10自带的工具来做。
我尝试了Chrome的打印到pdf的功能,但这与身份验证不起作用。打印的页面只是登录url,即使我登录并导航到查看我需要的信息。
显然,Powershell可以使用一种叫做wscript
的东西来发送击键,突出显示窗口,复制所有内容并将其转储到文本文件中。但是我不知道从哪里开始。
我尝试使用postman来构建一个可以访问该页面的查询。但是,使用正确的凭据报告:
防伪验证失败
当使用邮差时,我注意到当登录页面被打开时(在我登录之前)一个cookie被下载。我在Firefox中签入了开发人员工具,登录页面提供了这个名为__H2RequestVerification
的cookie。当发出登录请求时,浏览器发送用户名、密码和这个cookie(它是由字母和数字组成的一长串随机字符串)。
我尝试在postman手动执行此操作,但是当我到达提供凭据的部分时,我总是得到"连接重置";错误,即使在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"
和饼干:
__H2RequestVerification "Wj3e8tH-8ikvaghOBS0k5x0Vd9X74CRhVRw5Ch9BgNwLIkfGYNI0Do9stFyI0B0yVoq6BQIeJZTGqApRs8Tb3tx0sMg1"
为了防止伪造验证失败为了检测您的尝试,该站点使用JavaScript在初始页面加载后加载数据。
像这样抓取站点的唯一方法是使用一个使用Selenium驱动真正浏览器的程序(参见这个问题)。
如果不安装Selenium或其他可以在页面上运行JavaScript的软件,则无法完成此操作。
您确实可以使用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();")