我正在尝试登录一个网站并下载一个网页。 不要惊慌——该网站和凭证是公开的...
无论如何,我的代码如下:
curl -k https://url.retail.publishedprices.co.il/login > 01.txt
sfk xed 01.txt "_[start][0.10000 bytes]csrftoken__" +xed "_/>**__" +xed "_\q id=\qcsrftoken\q value=\q__" +xed "_\q __" -tofile 02.txt
set /p csrf=<02.txt
curl -k -d "username=retalix&password=12345&csrftoken=%csrf%" https://url.retail.publishedprices.co.il/file/d/RamiLevi/ > RL.txt
该代码的作用是下载登录页面,提取 csrf 变量并使用它以及用户名/密码登录同一网站中的另一个子“域”。
最终结果应为保存到“RL.txt”中的网页但是我找到的所有解决方案都不起作用,我不明白为什么。
任何帮助,将不胜感激!
答案1
由于我当时正在做类似的事情,所以我很快为您整理了以下内容:
请根据您的要求更改路径和文件名,并确保路径后面有一个斜杠。
$path = "c:\test\"
$filename = "website.txt"
$url = "https://url.retail.publishedprices.co.il/login"
$url2 = "https://url.retail.publishedprices.co.il/file/d/RamiLevi/"
$ie = New-Object -com InternetExplorer.Application
$ie.visible = $true
$ie.silent = $false
$ie.navigate("$url")
while($ie.ReadyState -ne 4) {start-sleep -m 100}
if ($ie.document.url -Match "invalidcert"){
$sslbypass=$ie.Document.getElementsByTagName("a") | where-object {$_.id -eq "overridelink"}
$sslbypass.click()
start-sleep -s 5
}
$ie.Document.IHTMLDocument3_getElementById("username").click()
$ie.Document.IHTMLDocument3_getElementById("username").value ='retalix'
$ie.Document.IHTMLDocument3_getElementById("password").click()
$ie.Document.IHTMLDocument3_getElementById("password").value ='12345'
$ie.Document.IHTMLDocument3_getElementById("submit").click()
start-sleep 5
$ie.navigate($url2)
start-sleep 10
$ie.Document.body.outerHTML | Out-File -FilePath $path$filename
由于启动睡眠,运行时间大约需要 25 秒,这是为了允许页面加载。根据您的连接情况,您可能需要增加这些时间。
运行脚本并对结果满意后,您可以执行以下操作。
更改以下内容,以便 IE 不会在桌面上打开:
$ie.visible = $true
到
$ie.visible = $false
并在脚本末尾添加以下内容以确保 IE 最后关闭:
$ie.quit()
希望这可以帮助。