JavaScript中的跨页面静默交互

时间:2017-09-11 12:08:25

标签: javascript jquery

我目前正在做一个项目并且首先遇到了问题。我需要做以下事项:
1.通过JavaScript静默访问网页(在同一个域上) 2.在该网页上,通过按钮

导航来导航 我的意思是,我需要(例如)按“提交”#39;更改页面上表单中的一些值后的按钮。但是,所有这一切都需要默默地完成。就像在,客户端看不到任何这种情况 - 它在背景中都是静默的。 (为了清楚我的意思,我会在下面添加一些伪代码)

我已经将这两个方面排序了,它只是让我们需要解决这些问题。用于访问'页面,我正在使用jQuery $.get("url");,并且我计划使用返回的对象的document属性进行交互。

我还没有找到关于这个主题的更多信息,所以任何帮助都会受到赞赏。

重要提示

由于我们组织的明智决策,并且因为所有操作都在非常重的防火墙后面,我们使用IE 11作为旧系统兼容性的主要浏览器。这意味着,我们可以使用ActiveX。我还没有找到使用ActiveX来达到这种目的的重要性,但我认为有必要注意以防有任何使用ActiveX的解决方案。

伪代码

page_object = $.get(url)

page_object.document.getElementById("first-button").click();

// wait for that to finish

page_object.document.getElementById("input-1").change("Changed input");
page_object.document.getElementById("input-2").change("Changed input");

page_object.document.getElementById("form").submit()

回答问题

对于我们的内部系统而言,另一个团队非常沮丧他们喜欢做什么,他们保持他们喜欢的系统(因为,他们不会改变它)。我的经理特别要求以这种方式完成,不完全确定原因,因此,不幸的是,网络抓取方法是不可能的。

概述

实际上是什么

我们使用票务系统来管理我们的内部员工IT问题,让我们称其为Alpha模糊不清。 Alpha是一个严格的系统,我们无法直接访问其API,以便在系统外发布新票。但是,更高级别的应用程序团队创建了一个可以发布自己的票证的票证网页,但是他们使用的方法意味着我们无法推导出该方法并将其应用于我们自己的脚本以尝试自动化我们的服务。所以,而不是让我们的客户' (即需要IT协助的内部员工)访问网站,填写表格,下载修复程序,我们计划让他们点击按钮(或者我们将他们引导到网页),它将a)自动填充所有相关信息并执行所需的任何操作,b)提交故障单,将其发送给Alpha并确保其全部记录正确。我必须说清楚,没有' illigal'正在进行的活动 - 如果我是的话,我就不会在StackOverflow上播放它。所有这些都由我们的应用程序开发团队直接指示为解决方法,直到API可用。

1 个答案:

答案 0 :(得分:0)

听起来你需要一个无头浏览器。不确定是否有任何客户端无头浏览器...但如果你可以运行nodeJS,一个解决方案是使用zomiejs。

在阅读您的评论之后,似乎您有相关信息可以自动填写员工的表格,因此我只想创建一个简单的网页,自动填写其他部门提供的表格的副本表格。当用户提交表单时,向服务器发送POST请求,然后服务器将使用无头客户端与其他部门表单进行交互,并使用正确的信息填写它,然后响应POST。

然而,这似乎是一种完成任务的非常人为的方法。更好的方法是查看他们正在使用的表单的端点并在那里发送数据,然后处理响应。

以下是一个片段:

const Browser = require('zombie');

// We're going to make requests to http://example.com/signup
// Which will be routed to our test server localhost:3000
Browser.localhost('example.com', 3000);

describe('User visits signup page', function() {

  const browser = new Browser();

  before(function(done) {
    browser.visit('/signup', done);
  });

  describe('submits form', function() {

    before(function(done) {
      browser
        .fill('email',    'zombie@underworld.dead')
        .fill('password', 'eat-the-living')
        .pressButton('Sign Me Up!', done);
    });

    it('should be successful', function() {
      browser.assert.success();
    });

    it('should see welcome page', function() {
      browser.assert.text('title', 'Welcome To Brains Depot');
    });
  });
});