Greasemonkey: отправить содержимое всей страницы вперед

Можно ли выбрать полное содержимое страницы после того, как загрузка документа будет готова, и отправить его в сообщении ajax на другой сервер?

Я пытаюсь это проверить, я запустил два 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 ничего не получает.


person szab.kel    schedule 20.08.2014    source источник


Ответы (2)


Итак, это не решение проблемы, описанной выше, а скорее лучший способ сделать это.

Я пытался сделать автоматизацию с помощью Greasemonkey, поэтому он пытается отправить данные в другое место. Для этого есть инструмент, который называется casperJS (построен на PhantomJS, он же требуется для его запуска). По сути, вы можете написать JavaScript, чтобы перемещаться по сайту, выбирать нужные данные и публиковать их с помощью утилиты ajax от casperjs. Все это хорошо задокументировано.

casperjs.org

каспер ajax

Учебное пособие: Крис Хоукс: автоматизация и парсинг с помощью PhantomJS и CasperJS

person szab.kel    schedule 20.08.2014

Вы должны отправить данные в виде пары key/value:

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

Затем найдите входящее свойство html в своем суперглобальном файле $POST.

person Jeremy J Starcher    schedule 20.08.2014
comment
С GM_xmlHTTPRequest() не работает, только с $.ajax(), отправит запрос, но получаю пустой пост, так же получаю ошибку (console.log): Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:9000/index.php. This can be fixed by moving the resource to the same domain or enabling CORS. - person szab.kel; 20.08.2014
comment
Странно... попробуйте заменить строку grant на эту: @grant GM_xmlhttpRequest - person Jeremy J Starcher; 20.08.2014
comment
Тем не менее, ajax gm ничего не сделает. Он даже не отправляет сообщение (проверено на вкладке сети firefox) - person szab.kel; 20.08.2014