请问 php curl 如何获取有 ajax 的返回??
时间:2014-05-25
来源:互联网
e.g. url = http://abc.com/test.php
test.php
当 ajax 仲未出黎,咁 curl 拎返黎既 result 就冇左 ajax 嗰 d 内容。
试过 file_get_content 都一样。
curl 加埋 set curl_opt cookie 都系咁。
咁有咩方法可以拎埋成版完整内容??
谢谢

作者: yuki~~ 发布时间: 2014-05-25
What is your original requirement?
请问 php curl 如何获取有 ajax 的返回??
e.g. url = http://abc.com/test.php
test.php
{ajax content here}
如果直接用 curl 去拎 http://abc.com/test.php
当 ajax 仲未出黎,咁 curl 拎返黎既 result ...
作者: a8d7e8 发布时间: 2014-05-26
自己爬吓 manual 先啦
作者: skww 发布时间: 2014-05-26
请问 php curl 如何获取有 ajax 的返回??
e.g. url = http://abc.com/test.php
test.php
{ajax content here}
如果直接用 curl 去拎 http://abc.com/test.php
当 ajax 仲未出黎,咁 curl 拎返黎既 result ...
就算有方法模拟浏览器运行 JavaScript ,也不知要运行多久, AJAX 或动画才会完成。
有些网页的 JavaScript 是一直 run 的。
作者: xianrenb 发布时间: 2014-05-26
Why?
What is your original requirement?
但发觉如果 d web page 有 d content 系用 ajax,嗰 d content 用 curl 就拎唔到。
下面系段 code
{
global $__TIMEOUT;
global $__CONNECT_TIMEOUT;
global $__COOKIE_PATH;
//$ch = curl_init();
//curl_setopt($ch, CURLOPT_URL, $url);
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_TIMEOUT, $__TIMEOUT);
//curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $__CONNECT_TIMEOUT);
//curl_setopt($ch, CURLOPT_COOKIEJAR, $__COOKIE_PATH);
//curl_setopt($ch, CURLOPT_COOKIEFILE, $__COOKIE_PATH);
//curl_setopt($ch, CURLOPT_COOKIE, $__COOKIE_PATH);
//$data = curl_exec($ch);
//curl_close($ch);
$data = file_get_contents($url);
return $data;
}
作者: yuki~~ 发布时间: 2014-05-26
冇 requirement 的,只系我自己试紧用 php 去 get page。
但发觉如果 d web page 有 d content 系用 ajax,嗰 d content 用 curl 就拎唔到。
下面系段 code
function GetPage($url)
{
global $__T ...
作者: a8d7e8 发布时间: 2014-05-26

curl 同 file_get_content 都用唔到
要用一个叫 phantom.js
之后响 php 到 exec("phantom.js"); <= 之后再拎返个 output
作者: yuki~~ 发布时间: 2014-05-26
搵到办法喇

curl 同 file_get_content 都用唔到
要用一个叫 phantom.js
之后响 php 到 exec("phantom.js");
作者: a8d7e8 发布时间: 2014-05-26
谢分享, PhantomJS 好劲啊..... 成个 webkit

作者: 烟民比食屎9更贱 发布时间: 2014-05-26
php 上那 server 无装 phantom_js.exe 都可用 php exec() 行到 js file?

作者: a8d7e8 发布时间: 2014-05-26
印象中 yuki 兄唔系新手. 只要佢方向正确, 细节就 okay.
做法先写落 temp 再读返 (佢有得直接 return)

Click to view full image
or http://postimg.org/image/cd12zls6x/full/
[ 本帖最后由 yuki~~ 於 2014-5-7 07:46 PM 编辑 ]
作者: yuki~~ 发布时间: 2014-05-26
我响 windows 试的。用 Apache2.4 + Visual Studio 2013 + PHP 5.5
做法先写落 temp 再读返 (佢有得直接 return)

Click to view full image
or http://postimg.org/image/cd12zls6x/full/
htt ...
var allChilds = page.evaluate(function(){return document.getElementsBytagName("option");});
var eleValue = page.evaluate(function(allChilds,i){return allChilds.item(i).getAttribute("value");});
当入 arg allChilds 时, 佢会话 allChilds reference error
作者: 烟民比食屎9更贱 发布时间: 2014-05-26
点解唔喺第一个 function() 入面做埋?
先不说 syntax error, evaluate 只可 return primitive type.昨晚我试了试拎 http://news.google.com, page.content 返来的 result 有啲系 relative links, 有啲甚至系 file:// 开头....咁样想喺 browser 睇个 html 就会有问题, 甚至令到个 chrome DoS.....如果只用 DOM 读返就 okay 的. 佢个 technews 例子只系读手机版, 非常 okay.
原来如此!! 但是有一个问题, 唔知你遇唔遇到。就系:
var allChilds = page.evaluate(function(){return document.getElementsBytagName("option");});
var eleValue = page.evaluate(function(allChilds,i){retu ...
作者: a8d7e8 发布时间: 2014-05-26
原来如此!! 但是有一个问题, 唔知你遇唔遇到。就系:
var allChilds = page.evaluate(function(){return document.getElementsBytagName("option");});
var eleValue = page.evaluate(function(allChilds,i){retu ...
如果系既,你要过一阵再试,e.g. setInterval 250ms 再 check

如果一 load 就有,咁唔驶用 phantomjs 喇,直接用 simple dom php 去 read 仲方便啦。
[ 本帖最后由 yuki~~ 於 2014-5-8 07:38 PM 编辑 ]
作者: yuki~~ 发布时间: 2014-05-26
一言惊醒梦中人
你嗰 option 系咪 ajax or javascript set 架 同埋系咪会迟 d 先有 (e.g. 我嗰个 case load 左个 page,佢有中间 d content 系 ajax 再 load 的)???
如果系既,你要过一阵再试,e.g. setInterval 2 ...
作者: a8d7e8 发布时间: 2014-05-26
系喎. 可以直接用其他嘢读返来变 absolute URL 先再用 phantomJS cap 图
一言惊醒梦中人

作者: yuki~~ 发布时间: 2014-05-26
你想做乜呀?
点解唔喺第一个 function() 入面做埋?
先不说 syntax error, evaluate 只可 return primitive type.昨晚我试了试拎 http://news.google.com, page.content 返来的 result 有啲系 relati ...

作者: 烟民比食屎9更贱 发布时间: 2014-05-26
你讲个 evaluate 净可以 return primitive type 问题 document 有讲, 有方法 workaround 就算啦....
仲有你咪以为佢系 full featured js 先得架..... 人地个 example 都唔系咁做 -_-" 要咁做架大佬 -> evaluate(function(a, b) {}, a, b)
分 2 个 fn 系想 demo 俾各位睇出左咩问题, 原来佢 arg 唔受 object, allChilds 系 option collection object, 佢受唔到, 要用返 document.get...("option"); 才可 return value. 真系好废。仲有, 唔知系 js 问题, ...
作者: a8d7e8 发布时间: 2014-05-26
phantom 个 sample 有你要既野 page.render

作者: a8d7e8 发布时间: 2014-05-26
分 2 个 fn 系想 demo 俾各位睇出左咩问题, 原来佢 arg 唔受 object, allChilds 系 option collection object, 佢受唔到, 要用返 document.get...("option"); 才可 return value. 真系好废。仲有, 唔知系 js 问题, ...

作者: yuki~~ 发布时间: 2014-05-26
暂时问题系 screen cap 返 phantomjs 个 website background 变咗黑色.......喺 chrome 睇白色.
你讲个 evaluate 净可以 return primitive type 问题 document 有讲, 有方法 workaround 就算啦....
...
作者: 烟民比食屎9更贱 发布时间: 2014-05-26
oh, 原来你都知, sorry 的确系我太武断.
变白/黑系因为个 page 未 load 好就 cap 左。又或者佢 run page 内的 js 出现问题。evaluate 出到 non primitive type, 因为 check 到 return 后的 object.member! 反而当 arg 入去另一个 evaluate 内就有问题。你写 ...
作者: a8d7e8 发布时间: 2014-05-26
变白/黑系因为个 page 未 load 好就 cap 左。又或者佢 run page 内的 js 出现问题。evaluate 出到 non primitive type, 因为 check 到 return 后的 object.member! 反而当 arg 入去另一个 evaluate 内就有问题。你写 ...
作者: a8d7e8 发布时间: 2014-05-26
等咗廿秒都系黑色喎.......
oh, 原来你都知, sorry 的确系我太武断.
作者: 烟民比食屎9更贱 发布时间: 2014-05-26
http://stackoverflow.com/questions/13077828/for-loop-in-javascript-outputs-value-only-from-last-iteration
作者: 烟民比食屎9更贱 发布时间: 2014-05-26
system = require('system'),
address, output, size;
page.settings.javascriptEnabled = false;
if (system.args.length < 3 || system.args.length > 5) {
console.log('Usage: rasterize.js URL filename [paperwidth*paperheight|paperformat] [zoom]');
console.log(' paper (pdf output) examples: "5in*7.5in", "10cm*20cm", "A4", "Letter"');
phantom.exit(1);
} else {
address = system.args[1];
output = system.args[2];
page.viewportSize = { width: 600, height: 600 };
if (system.args.length > 3 && system.args[2].substr(-4) === ".pdf") {
size = system.args[3].split('*');
page.paperSize = size.length === 2 ? { width: size[0], height: size[1], margin: '0px' }
: { format: system.args[3], orientation: 'portrait', margin: '1cm' };
}
if (system.args.length > 4) {
page.zoomFactor = system.args[4];
}
page.open(address, function (status) {
if (status !== 'success') {
console.log('Unable to load the address!');
phantom.exit();
} else {
window.setTimeout(function () {
page.render(output);
phantom.exit();
}, 20000);
}
});
}
唔关等唔等事。你试下先 page.settings.javascriptEnabled = false; 因为 phantomjs run page 内的 js 好多时有问题。再唔系要试 run 左几次, 系咁的, 应该系 bug
作者: a8d7e8 发布时间: 2014-05-26
page Array() 无法在 for loop 度正确运作, 原来系 js 本身问题。 要用 closure 限制个 var scope
http://stackoverflow.com/questions/13077828/for-loop-in-javascript-outputs-value-only-from-last-iteration
作者: a8d7e8 发布时间: 2014-05-26
都系黑色啊......var page = require('webpage').create(),
system = require('system'),
address, output, size;
page.settings.javascriptEnabled = false;
if (system.args.length < 3 || system ...

我试 le 个有野返。
你试边条 link??? 方便讲吗????
page.onLoadFinished = function ()
{
page.render("test.png");
phantom.exit();
}
page.open("http://news.google.com/");
作者: yuki~~ 发布时间: 2014-05-26
我只系拎佢个 rasterize.js 出来, 改咗少少咋...
你 test 既话可以尽量整到最简单黎试。

我试 le 个有野返。
你试边条 link??? 方便讲吗????
var page = require('webpage').create();
page.onLoadFinished = function ()
{
page.rend ...
作者: a8d7e8 发布时间: 2014-05-26

作者: yuki~~ 发布时间: 2014-05-26
都系黑色啊......var page = require('webpage').create(),
system = require('system'),
address, output, size;
page.settings.javascriptEnabled = false;
if (system.args.length < 3 || system ...
1) 先移走个 phantom.exit() , 仲黑的话
2) 移走果 d fomatting 既 code, 用最简单的 .open(url, function(){.render("abc.jpg");}
作者: 烟民比食屎9更贱 发布时间: 2014-05-26
PS. javascript by default is on
page.open("http://phantomjs.org", function () {
page.render("out.png");
});
按优先次序试以下, step by step
1) 先移走个 phantom.exit() , 仲黑的话
2) 移走果 d fomatting 既 code, 用最简单的 .open(url, function(){.render("abc.jpg");}
作者: a8d7e8 发布时间: 2014-05-26

page.onLoadFinished
作者: 林珍儿 发布时间: 2014-05-26
你都唔用我讲嗰段 code 既。

page.onLoadFinished
[ 本帖最后由 烟民比食屎9更贱 於 2014-5-13 12:35 AM 编辑 ]
作者: 烟民比食屎9更贱 发布时间: 2014-05-26
唔系好关事, 我都系用page.onLoadFinished , 但有d网真系会黑。好似毒果报个网,cap 10 次有 8 次都系黑的。cap oncc 完全无问题。我怀疑系毒果有 fb plug-in 搞到咁。
不过看 https://github.com/ariya/phantomjs/issues/11563 , PhantomJS 真的可能有某些图像处理的问题。
作者: xianrenb 发布时间: 2014-05-26
但 cap 出来应该白的地方都系黑咗!
2014-5-13 11:20 AM
captured by pjs
2014-5-13 11:20 AM
captured by chrome extension
2014-5-13 11:20 AM
captured by pjs
2014-5-13 11:20 AM
captured by chrome extension
作者: a8d7e8 发布时间: 2014-05-26
我用个 irfanview set 咗 transparent 色用黑色 background!
作者: a8d7e8 发布时间: 2014-05-26
多谢帮手试!
唔系好关事, 我都系用page.onLoadFinished , 但有d网真系会黑。好似毒果报个网,cap 10 次有 8 次都系黑的。cap oncc 完全无问题。我怀疑系毒果有 fb plug-in 搞到咁。
作者: a8d7e8 发布时间: 2014-05-26
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28