我有一个网站,我可以在登录后查看信息。我需要捕捉显示的东西在脚本中使用。
安装软件不是一个选择-我必须用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"
2条答案
按热度按时间gstyhher1#
为了让防伪验证失败之类的东西检测到你的尝试,网站在初始页面加载后使用JavaScript加载数据。
抓取这样的网站的唯一方法是使用一个使用Selenium(see this question)驱动真实的浏览器的程序。
如果不安装Selenium或其他可以在页面上运行JavaScript的软件,您就无法做到这一点。
7vux5j2d2#
你确实可以使用Selenium,这里有一个想法: