我正在使用PHP尝试在父页面加载完成后的几毫秒内尝试动态加载内容的页面。
我使用curl来解析页面,而simpleHtmlDom则从解析后的html中抓取东西。
我努力遍历DOM并爆炸()html之外的东西都没有返回。我唯一的想法是,在加载父页面之后加载内容。
这是我的代码。
<?
$url = 'http://www.facebook.com/OneAndroidAppaDay';
$scrapeUrl = 'http://www.facebook.com/OneAndroidAppaDay';
include_once('simple_html_dom.php');
require_once("bitly.php");
$userAgent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)';
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_URL,$scrapeUrl);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$html = curl_exec($ch);
if (!$html) {
echo "<br />cURL error number:" .curl_errno($ch);
echo "<br />cURL error:" . curl_error($ch);
exit;
}
$appBitlyUrl = $html->find('div[class=UIStoryAttachment_Title]',0)->find('a',0)->href; // fail :(
echo 'Bitly Url: ' . $appBitlyUrl;
?>
在第24行(用内联注释表示)中出现了这个错误:
致命错误:在第24行的/home/xxxxxxxx/public_html/xxx.xx/xxxx.php中调用非对象上的成员函数find()
有没有办法让它在抢夺页面的html之前等待一两秒?或者也许有人有更好的见解?
由于
标记
答案 0 :(得分:1)
做一个简单的延迟
sleep(2); // 2 second delay before continuing
答案 1 :(得分:0)
您应该重新阅读错误消息。它不是源于时间问题。
你从curl得到一个$ html字符串。但你不能调用phphtmldom函数 - &gt;立即找到它。你必须在遍历之前解析它。另外还不清楚为什么你首先使用curl。要么只使用$dom = str_get_html($html)
,要么尝试:
$dom = file_get_html('http://www.facebook.com/OneAndroidAppaDay');
$bituurl = $dom->find('div[class=UIStoryAttachment_Title]',0)->...