如何使用javascript自动关闭网页?

时间:2017-05-15 17:26:30

标签: javascript asp.net windows batch-file

我在不同的论坛中发现了很多像我这样的问题,但我找不到能够解决我的问题的答案。

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

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

http://myapplication.com/DoStuff.aspx

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

我尝试过:

我试图通过使用javascript来解决它,但我总是收到这条消息:

scripts may close only the windows that were opened by it

使用" window.close()"创建的javascript函数并不重要,windows不会关闭。

Chrome和Firefox会返回该消息。 IE让我尝试关闭窗口,但如果我真的想关闭它,它会在popUp中询问。

3 个答案:

答案 0 :(得分:1)

您需要的可能是无头浏览器,例如 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执行脚本。通常情况下,应该这样做......

答案 1 :(得分:1)

仅使用批处理文件,因为我坚信您不需要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.

答案 2 :(得分:0)

在* 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,请参阅

另见