无头互联网浏览器?

Jar*_*red 69 automation webautomation headless-browser

我想做以下几点.登录网站,单击几个特定链接,然后单击下载链接.我想将它作为Windows上的计划任务或Linux上的cron作业运行.我对我使用的语言并不挑剔,但我希望如果可能的话,不要在屏幕上放置浏览器窗口.

Nat*_*ley 150

以下是我所知道的无头浏览器列表:

  • HtmlUnit - Java.定制浏览器引擎.有限的JavaScript支持/ DOM模拟.开源.
  • Ghost - 仅限Python.基于WebKit的.完整的JavaScript支持.开源.
  • 斜纹 - Python /命令行.定制浏览器引擎.没有JavaScript.开源.
  • PhantomJS - 命令行/所有平台.基于WebKit的.完整的JavaScript支持.开源.
  • Awesomium - C++ /.NET /所有平台.铬为主.完整的JavaScript支持.商业/免费.
  • SimpleBrowser - .NET 4/C#.定制浏览器引擎.没有JavaScript支持.开源.
  • ZombieJS - Node.js. 定制浏览器引擎.JavaScript支持/模拟DOM.开源.基于jsdom.
  • EnvJS - 来自Java/Rhino的JavaScript.定制浏览器引擎.JavaScript支持/模拟DOM.开源.
  • Watir-webdriver无头宝石 - Ruby通过WebDriver.通过浏览器(Firefox/Chrome/Safari/IE)提供完整的JS支持.
  • Spynner - 仅限Python.PyQT和WebKit.
  • jsdom - Node.js. 定制浏览器引擎.通过模拟DOM支持JS.开源.
  • TrifleJS - 使用MSIE(Trident)和V8的PhantomJS端口.开源.
  • ui4j - 纯Java 8解决方案.围绕JavaFx WebKit Engine的包装库.无头模式.
  • Chromium Embedded Framework - 完整的Chromium嵌入式版本,可根据需要进行屏幕外渲染.C/C++,包含.NET包装器(和其他语言).因为它是Chromium,它支持一切.BSD许可.
  • Selenium WebDriver - 通过浏览器(Firefox,IE,Chrome,Safari,Opera)完全支持JavaScript.官方支持的绑定是C#,Java,JavaScript,Haskell,Perl,Ruby,PHP,Python,Objective-C和R.非官方绑定可用于QtGo.开源.

通过模拟DOM提供JavaScript支持的无头浏览器通常会遇到一些使用更高级/模糊浏览器功能的网站的问题,或者具有视觉依赖性的功能(例如通过CSS位置等),因此在这些浏览器中支持纯JavaScript浏览器通常是完整的,实际支持的浏览器功能应该被视为仅部分.

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

  • JS支持HTMLUnit非常糟糕.恐怕不是答案. (11认同)
  • HtmlUnit的javascript没什么问题。考虑它是一个无JS的浏览器。 (2认同)
  • 不幸的是,HtmlUnit和HttpUnit都是前Ajax.它们是为一个Javascript用于表单验证的时代而编写的(你可以完全忘记JQuery EVER在任何一个下工作的东西),而且根据我的阅读,任何人都不可能支持"现代"Javascript只是因为它需要完全重写他们的Javascript引擎,或者由另一个替换它的绑定可能*与原始的*不同,它需要事实上重写整个框架以适应它. (2认同)

ori*_*rip 5

查看twill,这是一种非常方便的脚本语言,可以满足您的需求.从示例:

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!
Run Code Online (Sandbox Code Playgroud)

如果您正在寻找更多灵活性,还有一个Python API.


Dan*_*ski 2

我曾经使用 Internet Explorer ActiveX 控件(WebBrowser、MSHTML)执行此操作。您可以实例化它而不使其可见。

这可以使用任何支持 COM 的语言来完成(Delphi、VB6、VB.net、C#、C++...)

当然,这是一个快速而肮脏的解决方案,可能不适合您的情况。