从PHP触发JS或查找加载的URL(HTMLsimpledom)

时间:2013-04-03 05:05:33

标签: php javascript xml web-scraping

我正在使用HTMlsimpledom为不再拥有数据库访问权限的客户废弃旧网站。

这个网站是一个编码噩梦,几乎没有可用的类,它使用的是表格。

(为了让事情变得更复杂一点 - 这个网站是用一些外语生成的,我不知道这个奇怪的字符。(但那是旁注,不是真正的问题))

无论如何 - 一切都很好并且正常工作,除了在一类页面上,它有一个JS锚点触发器来打开某种扭曲/老式的Ajax / JS中的电话号码。

链接如下:

<a class="icon1 clickTip" onclick="showIndexPhone(1517);showIndexMobile(1517);" title="">Phone</a>

所以我当然去搜索showIndexPhone()函数:

function showIndexPhone(id)
{
/*var oContent = oValue = null;
if ((oContent = document.getElementById("IndexPhone_" + id)) && (oValue = document.getElementById("IndexPhoneValue_" + id)))
{
oContent.innerHTML = oValue.innerHTML;*/
/*var oCounter = new Image();
oCounter.src = "./ctr.asp?id=" + id + "&type=2";*/
var xmlDoc = dbsRequest("./ctr.asp?id=" + id + "&type=2");
//}
} 

显然,showIndexPhone()只会构建一个简单的URL,如下所示:

 http://123.xxx/ctr.asp?id=1517&type=3

..并且还会在firebug控制台上显示id是文章ID,type是信息类型(电话,传真,姓名等)。

然后将其传递给另一个函数dbsRequest(URL),如下所示:

function dbsRequest(URL) {
try {
var xmlHTTP;
if (dbsBrowserType == "ie") { // code for IE
if (window.XMLHttpRequest) {
xmlHTTP = new XMLHttpRequest();
xmlHTTP.open("GET",URL, false);
xmlHTTP.send(null);
return xmlHTTP.responseXML.documentElement;
}
else if (window.ActiveXObject) {
xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
xmlHTTP.open("GET",URL, false);
xmlHTTP.send();
return xmlHTTP.responseXML.documentElement;
}
}
else if (dbsBrowserType == "ns" || dbsBrowserType == "op") { // code for Mozilla, Opera.
//netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
xmlHTTP = new XMLHttpRequest();
xmlHTTP.open("GET",URL, false);
xmlHTTP.send(null);
return xmlHTTP.responseXML.documentElement;
}
}
catch (e) {
//if (dbsBrowserType == "ie")
// alert("error: " + e.description);
//else if (dbsBrowserType == "ns" || dbsBrowserType == "op")
// alert("error: " + e);
return null;
}
}

然后我就卡住了。

我在JS,AJAX等方面非常糟糕,当我看到响应实际上是某种形式的XML时 - 我就被卡住了。我得到了大约13,000个条目 - 并且手动点击每个条目并不是一个真正的选择..

有没有办法获得由JS 触发的那些字段?

或者,有没有办法找到/构建响应的URL并将其解析为php?

编辑我

可在此处找到真实的实时页面示例:

http://123.org.il/?pg=indx_entry&CategoryID=171&ArticleID=1517

我不知道它是什么语言,但无论如何你需要点击右侧的绿色电话图标才能看到结果电话..

1 个答案:

答案 0 :(得分:1)

对该AJAX请求的响应只是原始XML数据。 showIndexPhone()正在检索数据并将变量xmlDoc设置为它,但它没有对其进行任何其他操作。尽管有函数名称,它实际上并没有在任何地方显示它。

无论如何,您可以在PHP中使用file_get_contents()来下载XML数据,然后使用其中一个XML解析器来解构它。编程PHP书中有一整章解释了如何处理XML。