我如何使用脚本访问网页上的文本,这是背后的身份验证?



我有一个网站,我可以在登录后查看信息。我需要捕获一些显示在脚本中使用的内容。

安装软件不是一个选项-我必须用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();")

最新更新