我有一些在工作中必须使用的“整合”系统。其中一些非常糟糕,带有框架,弹出式窗口等。
我当时正在考虑使用curl或类似方法来自动化一些东西。我需要登录,单击超链接,设置一些数据,然后他们进行一些发布。
可以使用卷发吗?还是我会更好地使用Selenium之类的东西?
wget
并且curl
可以使用Netscape cookie文件,因此,如果您的浏览器也使用此类文件,只需将其指定给下载程序就足够了。那么,您使用哪种浏览器?
我有一些在工作中必须使用的“整合”系统。其中一些非常糟糕,带有框架,弹出式窗口等。
我当时正在考虑使用curl或类似方法来自动化一些东西。我需要登录,单击超链接,设置一些数据,然后他们进行一些发布。
可以使用卷发吗?还是我会更好地使用Selenium之类的东西?
wget
并且curl
可以使用Netscape cookie文件,因此,如果您的浏览器也使用此类文件,只需将其指定给下载程序就足够了。那么,您使用哪种浏览器?
Answers:
是的,完全可以卷曲。最重要的是在使用curl期间保存和重新加载Cookie --cookie-jar
。您还可以根据需要发布表单数据。我通常使用称为Live HTTP Headers的Firefox插件来捕获浏览网站时发生的情况。它会记录所有标题,但也会记录任何表单帖子,这在尝试弄清楚curl时非常有用。我已经编写了bash脚本来自动执行各种curl调用,并使用管道和临时文件(由提供mktemp
)在网页上进行一些有限的处理,但是如果必须进行大量的网页处理,我通常会使用LibWWW切换到Perl。
对于下载页面内容的简单情况,请使用curl或wget。两者都是命令行工具,旨在通过HTTP下载文件,并且具有许多选项。就您而言,您可能需要使这些工具看起来更像浏览器。lutzky的答案和penguin359的答案提到了在这方面有用的curl和wget选项。
有时,当您需要登录时,首先手动在Web浏览器中登录,然后导出Web浏览器的cookie会容易得多(诸如allcookies或Firefox的Export Cookies的扩展名可以帮助您)。
如果您需要解析某些页面或表单的内容,则可能需要比curl和wget更高级的工具。有一些很好的工具,包括带有LWP
(libwww)和HTML::TreeBuilder
(HTML-Tree)的 Perl 或带有标准库(尤其是httplib
和htmllib
)的Python 。
要与网站进行更复杂的交互,请参考Perl的WWW :: Mechanize。该Perl库定义了与网站进行交互的高级功能,就像Web浏览器一样,包括POST,表单,Cookie,但不包括Javascript。如果您不是Perl,那么此库中的仿制品具有其他语言的类似功能,例如Python mechanize和Ruby Mechanize。
最后,当您需要Javascript时,通常的方法是使用由浏览器自动化框架驱动的Web浏览器。硒和瓦蒂尔是最受欢迎的选择;另请参阅除了SeleniumRC之外,还有没有其他好的工具可以提取包含JavaScript后绘制内容的网页?
我最喜欢的是wget
,因此我将举一个例子。您想要做的是尽可能紧密地复制浏览器会话,因此请使用相关的命令行参数。必要的内容取决于站点对您的浏览器的检查程度。--referer
(sic)通常就足够了,但您可能也需要--user-agent
和--load-cookies
。
这项技术基本上是对浏览器的欺骗-您正试图以wget
浏览器的身份向网站展示自己。您将面临的最大问题是验证码,该验证码在您提供的示例网站中不存在。另外,请确保您遵守网站的时间安排政策(在这种情况下为45秒),否则您可能会被阻止。
在不同的会话中可能无法下载相同的文件-该站点将特定文件的下载特权授予特定的会话。