作为序言,我想提一提,我对编程一无所知。我正在做的所有事情都在网上查找,因此,如果您提出的问题对您来说似乎是虚无的,对不起。预先感谢。
我正在处理#1网页,例如http://website.com/page.php?action=showall,其中显示了http://website.com/someotherpage.php?ID=12345形式的链接,我必须单击其中的链接。我是在Mac终端上输入的
curl 'http://website.com/login.php' -XPOST --data 'email=EMAIL&pass=PASS&submit=+' --cookie-jar ./login
curl --cookie ./login http://website.com/someotherpage.php?ID=[1-12345]
但是网页1不一定包含1到12345范围内的所有ID;实际上不存在此范围内的某些ID。我想知道是否可以仅打开上述形式的网页一中包含的网址。在页面源上,它们被列为
<a href='someotherpage.php?ID=223670'>Open</a>
此外,网页#1一次仅显示50个链接,因此单击完成后,我必须刷新并单击下50个链接。如何循环显示?
答案 0 :(得分:1)
可能,是的,但是curl无法单独完成,bash并不是解析HTML的 适合 脚本语言。但是,如果使用更好的脚本语言(例如PHP,Python,Perl或几乎所有支持libxml + libcurl的语言),这将很容易。例如,安装php-cli,然后尝试以下php脚本:
#!/usr/bin/env php
<?php
$email = '???';
$password = '???';
$ch = curl_init ();
curl_setopt_array ( $ch, array (
CURLOPT_COOKIEFILE => "", // enables cookie handling in ram, without needing a file.
CURLOPT_URL => 'http://website.com/login.php',
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => http_build_query ( array (
'email' => $email,
'pass' => $pass,
'submit' => ''
) ),
CURLOPT_RETURNTRANSFER => 1
) );
$html = curl_exec ( $ch );
$domd = @DOMDocument::loadHTML ( $html );
$xp = new DOMXPath ( $domd );
foreach ( $xp->query ( '//a[text()="Open"]' ) as $openUrl ) {
$url = "http://website.com/" . $openUrl->getAttribute ( "href" );
echo "visiting $url ..";
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_exec ( $ch );
echo " done.\n";
}
这将解析并访问带有确切文本“ Open”的任何<a>
链接,该链接是通过XPath //a[text()="Open"]
其中
//
的意思是start from the very top of the document
a
的意思是find <a> tags
[...]
的意思是with conditions
text()
的意思是“获取要扫描的元素的文本内容” ="Open"
-检查其内容是否完全“打开”