Scripting 定期从https站点提取页面的正确方法

Scripting 定期从https站点提取页面的正确方法,scripting,shell,lynx,Scripting,Shell,Lynx,我想为Cygwin/Bash创建一个命令行脚本,该脚本登录到一个站点,导航到一个特定页面,并将其与上次运行的结果进行比较。 到目前为止,我与Lynx的合作情况如下: ----snpipped, just setting variables---- echo "# Command logfile created by Lynx 2.8.5rel.5 (29 Oct 2005) ----snipped the recorded keystrokes------- key Right Arrow ke

我想为Cygwin/Bash创建一个命令行脚本,该脚本登录到一个站点,导航到一个特定页面,并将其与上次运行的结果进行比较。 到目前为止,我与Lynx的合作情况如下:

----snpipped, just setting variables----
echo "# Command logfile created by Lynx 2.8.5rel.5 (29 Oct 2005)
----snipped the recorded keystrokes-------
key Right Arrow
key p
key Right Arrow
key ^U" >> $tmp1 #p, right arrow initiate the page saving

#"type" the filename inside the "where to save" dialog
for i in $(seq 0 $((${#tmp2} - 1)))
do
    echo "key ${tmp2:$i:1}" >> $tmp1
done

#hit enter and quit
echo "key ^J
key y
key q
key y
" >> $tmp1

lynx -accept_all_cookies -cmd_script=$tmp1 https://thewebpage.com/login

diff $tmp2 $oldComp
mv $tmp2 $oldComp
它肯定感觉不“正确”:cmd_脚本由相对的用户操作组成,而不是指定确切的链接名称和操作。因此,如果站点上有任何更改、位置切换或添加新链接,我将不得不重新创建操作

此外,我无法检查任何错误,因此如果出现问题(登录失败等),我无法中止脚本

我一直在考虑的另一个选择是使用Ruby实现机械化(注意,我对Ruby没有任何经验)


改进或重写此功能的最佳方法是什么?

wget在这里有用吗

它是一个http、https和ftd下载命令行实用程序。它是自由软件(GNU)。它有许多选项,如身份验证和时间戳(只有在文件自上次更改后才下载)


我认为lynx对于简单的web自动化任务来说是一个很好的工具,但当然它也有它的局限性。如果您需要进行错误检查,您应该使用Perl、Python或Ruby的mechanize模块之一(如果您不知道这几种语言中的任何一种,Python可能是最容易学习的)

为了使您的lynx脚本更加健壮,您可以使用搜索功能来选择链接。在某些页面上使用链接列表(l)会有所帮助


最后,我会添加一些健全性检查,看看下载的文件是否真的是您想要的文件。

登录是通过表单(然后重定向到web界面)进行的,wget/curl可以处理吗?不确定,但我想您可以在URL中编码登录参数(?username=myname&password=1234)。在脚本中,您首先调用登录URL,然后调用您感兴趣的页面。。。