Automation 无头互联网浏览器?
我想做以下几点。登录一个网站,点击几个特定的链接,然后点击一个下载链接。我想在windows上以计划任务的形式运行它,或者在Linux上以cron作业的形式运行它。我对我使用的语言并不挑剔,但如果可能的话,我希望在运行时不在屏幕上显示浏览器窗口。我曾经使用Internet Explorer ActiveX控件(WebBrowser,MSHTML)这样做过。您可以实例化它而不使其可见 <>这可以用支持COM(Delphi,VB6,VB.net,C,C,C++,…)< /P>的任何语言来完成。Automation 无头互联网浏览器?,automation,headless-browser,webautomation,Automation,Headless Browser,Webautomation,我想做以下几点。登录一个网站,点击几个特定的链接,然后点击一个下载链接。我想在windows上以计划任务的形式运行它,或者在Linux上以cron作业的形式运行它。我对我使用的语言并不挑剔,但如果可能的话,我希望在运行时不在屏幕上显示浏览器窗口。我曾经使用Internet Explorer ActiveX控件(WebBrowser,MSHTML)这样做过。您可以实例化它而不使其可见 这可以用支持COM(Delphi,VB6,VB.net,C,C,C++,…)< /P>的任何语言来完成。 当然,这
当然,这是一个快速而肮脏的解决方案,可能不适合您的情况。除了自动下载文件(因为这是一个对话框)外,一个带有嵌入式网络控件的win表单可以做到这一点 你可以看一看,然后看一看。他们可能会使用C#代码来帮助您登录您的网站,导航到URL,甚至可能帮助自动下载文件 YMMV。如果链接是已知的(例如,您不必在页面中搜索它们),那么您可能可以使用。我相信它将跨多个获取进行状态管理
如果你有一点进取心,那么我会深入研究中国的新产品。他们将接口重新定义到HTTP堆栈,并且,IMHO,有一个易受这种脚本类型影响的接口。您可以与Ruby或mono一起使用。您还可以使用Live HTTP头(Firefox扩展)记录发送到站点的头(登录->链接->下载链接),然后使用fsockopen用php复制它们。您可能需要改变的唯一一件事是您从登录页面收到的cookie值 可以用来创建类似的东西。你能不能不使用下载管理器 还有更好的,但是FlashGet集成了浏览器,并且支持身份验证。您可以登录,单击一组链接并将它们排队,然后安排下载 你可以写一些东西,比如说,作为一个代理,捕捉特定的链接并将它们排成队列供以后下载,或者编写一个Javascript书签,修改链接以转到
”http://localhost:1234/download_queuer?url=“+$link.href
并将下载排队-但您将重新发明下载管理器轮子,有了身份验证,情况可能会更复杂
或者,如果您希望“登录,单击链接”位也自动执行-查看。。基本上,您通过HTTP库加载页面,找到下载链接并下载
使用Python稍微简化的示例:
import urllib
from BeautifulSoup import BeautifulSoup
src = urllib.urlopen("http://%s:%s@example.com" % ("username", "password"))
soup = BeautifulSoup(src)
for link_tag in soup.findAll("a"):
link = link_tag["href"]
filename = link.split("/")[-1] # get everything after last /
urllib.urlretrieve(link, filename)
这将在使用用户名/密码“username”和“password”进行验证后,下载example.com上的每个链接。当然,您可以使用HTML选择器查找更具体的链接(例如,您可以查找以http://cdn.example.com
)
您可以在几乎任何语言中执行相同的操作。.NET包含。您可以创建一个实例,将其发送到URL,然后轻松解析该页面上的html。然后你可以点击你找到的任何链接,等等
我只使用过这个对象很少,所以我不是专家,但如果您已经熟悉.NET,那么它可能值得一看。以下是我知道的无头浏览器列表:
- -爪哇。自定义浏览器引擎。模拟了有限的JavaScript支持/DOM。开源
- -仅限Python。基于WebKit。完全支持JavaScript。开源
- -Python/命令行。自定义浏览器引擎。没有JavaScript。开源
- -命令行/所有平台。基于WebKit。完全支持JavaScript。开源
- -C++/.NET/所有平台。铬基。完全支持JavaScript。商业/免费
- -.NET 4/C#。自定义浏览器引擎。没有JavaScript支持。开源
- -Node.js。自定义浏览器引擎。JavaScript支持/模拟DOM。开源。基于
- -通过Java/Rhino的JavaScript。自定义浏览器引擎。JavaScript支持/模拟DOM。开源
- 通过WebDriver使用-Ruby。通过浏览器(Firefox/Chrome/Safari/IE)完全支持JS李>
- -仅限Python。PyQT和WebKit李>
- -Node.js。自定义浏览器引擎。通过模拟DOM支持JS。开源
- -使用MSIE(三叉戟)和V8的PhantomJS端口。开源
- -纯Java 8解决方案。javafxwebkit引擎的包装器库,包括headless模式
- -Chromium的完整最新嵌入式版本,可根据需要进行屏幕外渲染。C/C++,带有.NET包装器(和其他语言)。因为它是铬,所以它支持一切。BSD许可
- -通过浏览器(Firefox、IE、Chrome、Safari、Opera)完全支持JavaScript。官方支持的有C#、Java、JavaScript、Haskell、Perl、Ruby、PHP、Python、Objective-C和R。非官方绑定可用于和。开源
setlocalusername
设置本地密码
去http://www.slashdot.org/
formvalue 1 Unikname$用户名
formvalue 1 upasswd$密码
提交
代码200#确保表单提交正确无误!
如果您希望获得更大的灵活性,还有一个问题<
setlocal username <your username>
setlocal password <your password>
go http://www.slashdot.org/
formvalue 1 unickname $username
formvalue 1 upasswd $password
submit
code 200 # make sure form submission is correct!
console.log('Loading a web page');
var page = new WebPage();
var url = "http://www.phantomjs.org/";
page.open(url, function (status) {
// perform your task once the page is ready ...
phantom.exit();
});
var page = require('webpage').create();
page.open(url, function (status) {
var title = page.evaluate(function () {
return document.title;
});
console.log('Page title is ' + title);
});