使用curl登录网站并下载网页

使用curl登录网站并下载网页

我正在尝试登录一个网站并下载一个网页。 不要惊慌——该网站和凭证是公开的...

无论如何,我的代码如下:

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()

希望这可以帮助。

相关内容