PhantomJS:提交一个表单(PhantomJS: submit a form)

2019-10-17 21:27发布

我填写,并使用PhantomJS提交表单,然后输出结果页面。 问题是,我不知道,如果这件事情是在所有被提交。

我打印结果页,但它是一样的原始页面。 我不知道这是因为它重定向回还是我没有提交或我需要等待更长的时间或或或。 在一个真正的浏览器发送一个GET和接收一个cookie,它用来发送最终收最终结果之前更多GETS - 飞行数据。

我复制这个例子中如何使用PhantomJS提交表单 ,使用diferent url和page.evaluate功能。

var page = new WebPage(), testindex = 0, loadInProgress = false;

page.onConsoleMessage = function(msg) {
  console.log(msg);
};

page.onLoadStarted = function() {
  loadInProgress = true;
  console.log("load started");
};

page.onLoadFinished = function() {
  loadInProgress = false;
  console.log("load finished");
};

var steps = [
  function() {
    //Load Login Page
    page.open("http://www.klm.com/travel/dk_da/index.htm");
  },
  function() {
    //Enter Credentials
    page.evaluate(function() {

                     $("#ebt-origin-place").val("CPH");
                    $("#ebt-destination-place").val("CDG");
                    $("#ebt-departure-date").val("1/5/2013");
                    $("#ebt-return-date").val("10/5/2013");

    });
  }, 
  function() {
    //Login
    page.evaluate(function() {

    $('#ebt-flightsearch-submit').click() ; 

     # also tried:
     # $('#ebt-flight-searchform').submit();   

    });
  }, 
  function() {
    // Output content of page to stdout after form has been submitted
    page.evaluate(function() {
      console.log(document.querySelectorAll('html')[0].outerHTML);
    });
  }
];


interval = setInterval(function() {
  if (!loadInProgress && typeof steps[testindex] == "function") {
    console.log("step " + (testindex + 1));
    steps[testindex]();
    testindex++;
  }
  if (typeof steps[testindex] != "function") {
    console.log("test complete!");
    phantom.exit();
  }
}, 50);

Answer 1:

感兴趣的网站是相当复杂刮。 我记录的HTTP流量来自美国荷航网站,并得到这个:

GET /travel/us_en/apps/ebt/ebt_home.htm?name=on&ebt-origin-place=New+York+-+John+F.+Kennedy+International+%28JFK%29%2CNew+York&ebt-destination-place=Paris+- +查尔斯+德+戴高乐+机场+%28CDG%29%2C +法国&C%5B0%5D.os = JFK&C%5B0%5D.ost =机场&C%5B0%5D.ds = CDG&C%5B0%5D.dst =机场&C%5B1 %5D.os = CDG&C%5B1%5D.ost =机场&C%5B1%5D.ds = JFK&inboundDestinationLocationType =机场&重定向=否chdQty = 0&infQty = 0& C%5B0%5D.dd = 2013年7月31日&C%5B1%5D.dd = 2013 -08-14&C%5B1%5D.format = DD%2Fmm%2Fyyyy&挠曲=真EBT舱级=经济与adtQty = 1&GotoPage记述=&cffcc =经济与SC =假HTTP / 1.1

您注射的形式元素的值是不是他们的服务器所期待的。

里面page.evaluate(),你是沙盒,但样本代码包含了一个钩子让沙盒控制台活动到外部主机。 对于其他的调试,还可以包括对象检查员等,但它们必须被注入到页面或部分代码的传递到评估()。



文章来源: PhantomJS: submit a form
标签: phantomjs