Greasemonkey:向前发送整页内容

时间:2014-08-20 13:58:28

标签: javascript php jquery ajax greasemonkey

文档加载完成后是否可以选择整页内容并将其发送到另一台服务器?

我正在尝试测试这个,我启动了两个php服务器:

localhost:9000:这个会收到Greasemonkey脚本发送的数据并将其保存到文件中。测试代码:

的index.php

<?php
if (isset($_POST) && count($_POST) > 0) {
    file_put_contents("SOMETHING_AND_IT_IS_POST.txt","");
    $data = var_export($_POST);
    file_put_contents("POSTED.txt",$data);
} else {
    file_put_contents("SOMETHING_BUT_NO_POST.txt",$data);
}

localhost:9001:模仿数据源,只托管一个html文件

post.html

<html>
<head>

</head>

<body>
<p>Test</p>
<div>
    <p> should work</p>
</div>
<!--<form action="" method="post">
  <p>Is commenting ok?</p>
  First name: <input type="text" name="fname"><br>
  Last name: <input type="text" name="lname"><br>
  <input type="submit" value="Submit">
</form> -->
</body>
</html>

Greasemonkey脚本:

// ==UserScript==
// @name        testajax
// @namespace   test
// @include     http://localhost:9001/post.html
// @version     1
// @grant       none
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js
// ==/UserScript==

$( document ).ready(function() {
  console.log( "Loaded!" );

  GM_xmlhttpRequest({
    method: "POST",
    url: "http://localhost:9000/index.php",
    data: $("body").html(),
    headers: {
      "Content-Type": "application/x-www-form-urlencoded"
    },
    onload: function(response) {
      alert("POSTED!");
    }
  });
});

因此,在浏览器中,我打开http://localhost:9001/post.html,GM脚本触发,console.log正在运行,但localhost:9000/index.php没有收到任何内容。

2 个答案:

答案 0 :(得分:2)

好的,所以它不是上述问题的解决方案,更像是一种更好的方法。

我尝试用greasemonkey进行自动化,这就是为什么它试图将数据发送到另一个地方。有一个工具,称为casperJS(内置于PhantomJS,它也需要运行它)。基本上,您可以编写JavaScript,在站点中导航,选择所需的数据并使用casperjs的ajax util发布。所有这些都记录在案。

casperjs.org

casper ajax

Tutorial: Automating & Scraping with PhantomJS and CasperJS by Chris Hawkes

答案 1 :(得分:1)

您必须将数据作为key / value对发送:

data: {html: $("body").html()},

然后在html超全局中查找传入的$POST媒体资源。