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 util на casperjs. Всичко това е добре документирано.

casperjs.org

casper 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