批处理脚本获取HTML网站和解析内容(没有wget,curl或其他外部应用程序)

pee*_*eet 3 curl wget batch-file html-parsing

我只需要使用Windows cmd功能.我需要来自网站的两个变量/字符串在batchscript中用于验证它的动作.为了不太简单,这个网站还需要进行身份验证.

我发现了这个地方:

@set @x=0 /*
:: ChkHTTP.cmd
@echo off
setlocal
set "URL=http://www.google.com"
cscript /nologo /e:jscript "%~f0" %URL% | find "200" > nul
if %ErrorLevel% EQU 0 (
echo Web server ok % Put your code here %
) else (
echo Web server error reported
)
goto :EOF

JScript */
var x=new ActiveXObject("Microsoft.XMLHTTP");
x.open("GET",WSH.Arguments(0));x.send();
while (x.ReadyState!=4) {WSH.Sleep(50)};
WSH.Echo(x.status)
Run Code Online (Sandbox Code Playgroud)

但我不确定是否有可能以这种方式获取网站内容而不是状态回答,而且我不知道如何实现网站认证.

上面的代码不能正常工作,因为它会因为管道而产生错误,但这似乎更接近我解析我希望的内容的需求.

roj*_*ojo 7

我只使用wget从Windows批处理脚本中获取Web内容.通过JScript使用XHR是个绝妙的主意!

但是,您尝试掠夺的脚本似乎是用于检查Web服务器是否响应,而不是用于获取内容.

通过一些修改,您可以使用它来获取网页并执行您需要的任何处理.

@if (@a==@b) @end /*

:: fetch.bat <url>
:: fetch a web page

@echo off
setlocal
if "%~1"=="" goto usage
echo "%~1" | findstr /i "https*://" >NUL || goto usage

set "URL=%~1"
for /f "delims=" %%I in ('cscript /nologo /e:jscript "%~f0" "%URL%"') do (
    rem process the HTML line-by-line
    echo(%%I
)
goto :EOF

:usage
echo Usage: %~nx0 URL
echo     for example: %~nx0 http://www.google.com/
echo;
echo The URL must be fully qualified, including the http:// or https://
goto :EOF

JScript */
var x=new ActiveXObject("Microsoft.XMLHTTP");
x.open("GET",WSH.Arguments(0),true);
x.setRequestHeader('User-Agent','XMLHTTP/1.0');
x.send('');
while (x.readyState!=4) {WSH.Sleep(50)};
WSH.Echo(x.responseText);
Run Code Online (Sandbox Code Playgroud)

  • @peet - 在Windows批处理语言和JScript中,`if(@a == @ b)@ end`行是一个有效的`if`语句.这是有效的,但它故意是错误的.该行的有趣位是最后的`/*`.这开始在JScript中进行多行注释,因此JScript忽略`/*`之后的所有内容,直到它遇到`*/`.事实上,因为`@ a`确实**不等于`@ b`,Windows cmd解释器不打算尝试执行`@end/*`,但很高兴继续处理JScript忽略的下一行作为评论. (3认同)