【问题标题】:How to automatically close webpage using javascript?如何使用javascript自动关闭网页?
【发布时间】:2017-05-15 17:26:30
【问题描述】:

我在不同的论坛中发现了许多类似我的问题,但我在其中的任何一个论坛中都找不到真正有助于解决我的问题的答案。

基本上,我想要的是通过命令提示符打开一个 URL,它会打开浏览器,处理一个网页,然后我希望它自动关闭。

我为什么需要这个? 我有一个在 IIS 上运行的应用程序。我需要在我的应用程序中每天运行一些例程。我可以通过运行类似于如下所示的 URL 来简单地结束这些例程:

http://myapplication.com/DoStuff.aspx?

问题是这完全是手动的。 我想知道是否可以创建一个调用我的 URL“开始http://myapplication.com/DoStuff.aspx?”的批处理文件,然后我可以在 Windows 上创建一个任务来每天运行该批处理文件。这对我有用,只是浏览器不会自动关闭。 我的意思是,我可以尝试一下,但在一周结束时,我至少会打开 5 个窗口。

我尝试过的:

我曾尝试使用 javascript 来解决它,但我总是收到此消息:

脚本只能关闭它打开的窗口

我使用“window.close()”创建的 javascript 函数无关紧要,窗口不会关闭。

Chrome 和 Firefox 会返回该消息。 IE 让我尝试关闭窗口,但它会在弹出窗口中询问我是否真的要关闭它。

【问题讨论】:

  • 您需要与页面交互,还是触发页面下载就足够了?我在想,如果不需要交互,您可以在 WSH 或 invoke-webrequest 或 PowerShell 中使用类似的简单 XMLHTTPRequest。
  • 您可以尝试使用一些测试自动化框架,例如带有 selenium 的 cucumber-jvm。它为您提供了在 Web 应用程序功能之外控制浏览器的可能性..
  • @rojo 我不需要与页面交互。例如,其中一个过程是生成一些 pdf 文件并发送到我的电子邮件。
  • 我相信,如果您不控制浏览器进程(从浏览器外部),弹出窗口是您可以从浏览器获得的最大功能。
  • 如果您不需要交互,请不要使用浏览器。选择一种语言(C#、PowerShell 等),然后使用它的工具来创建执行您想要的 HTTP 请求。然后使用 Windows 任务调度程序对其进行调度,或者在其中构建调度并将其作为服务运行。

标签: javascript asp.net windows batch-file


【解决方案1】:

您需要的可能是 headless browser,例如 PhantomJS(没有 GUI 的 WebKit 浏览器)。我建议您使用 CasperJS 来更轻松地创建脚本...

在您的系统上全局安装 Phantom 和 Casper,并编写一个最小的自动化脚本,如下所示:

var casper = require('casper').create();

casper.start('http://myapplication.com/DoStuff.aspx');

casper.then(function() {
  // Do something here...
});

casper.run();

设置一个 cron 作业(或 Windows 等效项)以使用 casperjs bin 执行脚本。通常,它应该可以解决问题...

【讨论】:

    【解决方案2】:

    使用批处理文件只是因为我坚信您不需要 JavaScript 来执行此操作。

    ::start a new browser session at the given url
    start iexplore "http://www.google.com"
    ::wait for whatever process to end if you actually have to wait
    timeout 15
    ::kill the browser process
    taskkill /im iexplore.exe /f /t
    

    如果它在没有人与之交互的机器上运行,并且您知道您登录的会话将是您退出的最后一个会话,那么您知道您进入的会话已经打开了 IE。所以你可以颠倒脚本的顺序,而不用太在意时间

    ::kill the browser already opened
    taskkill /im iexplore.exe /f /t
    ::open a new browser session at the given url
    start iexplore "http://www.google.com"
    ::if you have to wait, but don't know how long... leave the browser window open. We'll close it next time we run this batch file anyway.
    

    【讨论】:

      【解决方案3】:

      在 *nix,您可以创建一个 bash 脚本,其中包含

      #!/bin/bash
      
      /usr/bin/chromium-browser --user-data-dir="/home/USER/.config/chromium-no-flags" "http://myapplication.com/DoStuff.aspx"
      

      DoStuff.aspx内,任务完成时使用setTimeout()或其他函数调用window.close()

      setTimeout(close, 10000)
      

      new Promise((resolve, reject) => {
        // do asynchronous stuff
        resolve(/* value */)
      })
      .then(close)
      .catch(close)
      

      对于与cron 等效的 *indows,请参阅

      另见

      【讨论】:

        猜你喜欢
        • 2013-01-27
        • 2014-02-06
        • 2013-04-27
        • 2014-01-08
        • 2016-01-30
        • 2014-02-06
        • 1970-01-01
        • 2017-01-17
        • 1970-01-01
        相关资源
        最近更新 更多