如何将数据从Greasemonkey发送到PHP(WAMP)服务器?

时间:2013-02-23 13:05:24

标签: php wamp greasemonkey

我正在创建一个Greasemonkey脚本,我在这里编写六个变量(时间,移动,滚动,sav,prin,book和url)。

我需要发送这些变量'数据到我的PHP页面,以便可以使用WAMP服务器将这些数据插入到MySQL表中。

请问,任何人都可以提供准确的代码,因为我对这一切都不熟悉吗?

我的Greasemonkey脚本是:

{var ajaxDataObj = {
    s:      sav,
    p:      prin,
    b:      book,
    t:      finalTime,
    u:      url,
    a:      totalScroll,
    b:      tot
};

var serializedData  = JSON.stringify (ajaxDataObj);

GM_xmlhttpRequest ( {
    method: "POST",
    url:    "localhost/anuja/greasemonkey.php",
    data:   serializedData,
    headers: {
        "Content-Type": "application/json",
        "User-Agent": "Mozilla/5.0",    // If not specified, navigator.userAgent will be used.
        "Accept": "text/xml"            // If not specified, browser defaults will be used.
} }


和php方面是:

$jsonData   = json_decode($HTTP_RAW_POST_DATA);

echo jsonData.u;


这段代码没有运行..另外,我尝试检查我的变量u是否已使用jsonData.u传递,但它只是回应" jsonData.u"。

1 个答案:

答案 0 :(得分:0)

我只是创建了用户脚本,使Greasemonkey从打开的网页中抓取数据,并将POST参数发送到我本地XAMPP服务器上托管的PHP脚本,该脚本可以运行本地Python脚本来自动化工作。

这也是一种很酷的方法,用于从Javascript渲染页面中搜索数据,这对于Python刮刀来说很难,甚至比Selenium更好:P

这个参数由这个PHP示例网址中的&分隔:

http://www.sciencedirect.com/search?qs=Vascular%20stent&authors=&pub=&volume=&issue=&page=&origin=home&zone=qSearch&offset=1200

GM脚本部分:

// @grant        GM_xmlhttpRequest
unsafeWindow.sendPhp2Py = function(){
    //var ytitle = 'Youtube - ' + document.querySelector('div.yt-user-info').textContent.trim();
    var yurl = document.location.href;
    //console.info(ytitle);
    //console.info(yurl);
    var ret = GM_xmlhttpRequest({
        method: "POST",
        url: "http://localhost/php_run_py.php",
        //data: "ytitle="+ ytitle + "&yurl="+ yurl,
        data: "yurl="+ yurl,
        headers: {
            "Content-Type": "application/x-www-form-urlencoded"
        },
        onload: function(response) {
            console.log(response);
            // readyState 4 = complete
            // status = 200 OK
            if(response.readyState == 4 && response.status == 200){
                document.querySelector('#myPhpPyBtn').textContent = 'Sent to PHP!';
            }
        },
        onerror: function(e){
            console.log(e);
            document.querySelector('#myPhpPyBtn').textContent = 'PHP not connected';
        }
    });
};

PHP scipt:

<?php
    echo $_POST['yurl'];
//传递多个参数如下可以行得通 参数里包含空格哦也可以!!赞 Multiple parameters pass
    //echo shell_exec("python test.py \"".$_POST['ytitle']."\" \"".$_POST['yurl']."\"");
    //echo shell_exec("python GreaseMonkey_Php_Youtube_srt_generator.py ".$_POST['yurl']);
//更安全 Safer
    //system(escapeshellcmd("python test.py \"".$_POST['ytitle']."\" \"".$_POST['yurl']."\""));
    system(escapeshellcmd("python GreaseMonkey_Php_Youtube_srt_generator.py ".$_POST['yurl']));
?>

Python测试脚本:

#coding=utf-8
import sys
f = open("test.txt", "a+")
f.write(sys.argv[1] + "\n" + sys.argv[2]+ "\n") 
f.close()
print ("some output")

希望它可以提供帮助!