2012-03-03 70 views
0
<a href="#" onclick="return purchaseEntry('39873');">ABC</a> 

我打算抓取到网页并使用正则表达式获取某些内容。但是,只有在onclick被激活后才会显示此内容。我需要进入ABC并获取内容。我无法使用file_get_content(),因为没有链接将我带到ABC页面。当用户点击它时,ABC内容会显示出来。结果通过Javascript/Ajax/Json调用。通过PHP运行“onclick”通过PHP运行“onclick”

ABC内容是:

Name: XXXX 
Address: XXXXXX 

任何想法如何抓取到ABC和获取内容?

注意:我将不得不编写一个抓取到远程页面并获取ABC内容的PHP脚本。

额外的信息:

function purchaseEntry(customerid) { 
    $('customeridfield').value = customerid; 
    if (approvedAgents()) { 
     e1 = $('entrylisttable'); 
     e1.hide(); 
     getExistingDetails(customerid, 'confirmstatusexistingdetails'); 
     $('confirmstatushajjlicenceno').value = ''; 
     $('confirmstatusapproved').checked = false; 
     e1 = $('confirmstatus'); 
     e1.show(); 
    } 

    return false; 
} 

而且,这里是getExistingDetails:

function getExistingDetails(customerid, existingdetails) { 
    e1 = $(existingdetails); 
    e1.innerHTML = 'Loading ... <img src="/jpg/ajaxloader.gif" />'; 

    var url = '/samex/index.php'; 
    var pars = 'option=com_directory&view=entry2&customerid=' + customerid + '&format=raw'; 
    new Ajax.Request(url, { method: 'get', parameters: pars, 
     onSuccess: function(request) { 
      var json = request.responseText.evalJSON(); 
      jsondata = json['data']; 
      e1 = $(existingdetails); 
      e1.innerHTML = jsondata['clientdata']; 
     }, 
     onFailure: function(request) { 
      e1 = $(existingdetails); 
      e1.innerHTML = 'Unable to get information for customer ' + customerid; 
     } 
     }); 
} 

有什么建议?

+0

提供purchaseEntry()的js代码,在哪里显示? – sandeep 2012-03-03 10:12:04

+2

javascript和php运行在不同的环境中。他们之间唯一可能的交互是AJAX – 2012-03-03 10:12:09

+0

不太确定我明白你的意思 - 你想基本上从远程页面拉这个函数的名称(和值),然后......运行它? – BenOfTheNorth 2012-03-03 10:12:20

回答

2

您无法从PHP运行JavaScript事件。 PHP是服务器端语言,而HTML和JavaScript是客户端语言。

可以从客户端HTML获取数据和JavaScript是使用下面的方法之一的唯一方法:

使用HTML形式的行动提交数据到服务器。

<form action="/submit.php"> 
    <input name="purchaseEntry" value="39873" /> 
    <input type="submit" value="Submit" /> 
</form> 

使用AJAX调用向服务器发送数据而无需重新加载页面。

// jQuery ajax 
$.ajax({"url" : "/submit.php", 
     "type" : "post", 
     "data" : "purchaseEntry=" + document.getElementById("purchase-entry") 
     "success" : function() { 
      alert("data sent to server"); 
     } 
); 

当用户导航到其他页面时,从$ _REQUEST对象中提取数据。这假设你的数据在链接中。

<p><a href="/page2.php?purchaseEntry=39873">Page 2</a></p> 
+0

改写了我的问题.... – user311509 2012-03-03 11:02:22

+0

大多数爬虫不能读取DHTML(动态HTML )。一般来说,您的抓取工具只能看到RAW HTML。然而,当你点击远程页面中的链接时,你可以找出被调用的URL,完全绕过UI。除非远程服务器使用填充返回JSON,否则您需要从服务器获取它以避免跨域限制。 – jmort253 2012-03-03 11:08:18

+0

快速信息:使用萤火虫后,我发现我需要的所有内容驻留在e1.innerHTML = jsondata ['clientdata']; ... – user311509 2012-03-03 12:25:17

2

您的purchaseEntry('39873')可以包含一个ajax call到您的php文件。然后

php文件可以从array转换一个json使用echo json_encode($yourArray)

然后你ajax调用可以从php从接收json string再转它为JavaScript array/object回应。

+0

改写了我的问题.... – user311509 2012-03-03 10:44:00