Automation 无头互联网浏览器?

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>的任何语言来完成。 当然,这

我想做以下几点。登录一个网站,点击几个特定的链接,然后点击一个下载链接。我想在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。非官方绑定可用于和。开源
通过模拟DOM支持JavaScript的无头浏览器通常与一些使用更高级/模糊浏览器功能的站点或具有视觉依赖性的功能(例如通过CSS位置等)存在问题,因此尽管这些浏览器中的纯JavaScript支持通常是完整的,实际支持的浏览器功能应仅视为部分功能

(注意:这篇文章的原始版本只提到了HtmlUnit,因此有评论。如果你知道其他无头浏览器的实现并拥有编辑权限,请随意编辑并添加它们。)

Check out,这是一种非常方便的脚本语言,正好满足你的需要。从:

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);
});