【问题标题】:Bypassing loading screen when getting HTML content with curl使用 curl 获取 HTML 内容时绕过加载屏幕
【发布时间】:2015-08-07 16:05:57
【问题描述】:

我们正在使用 curl 从第三方网络服务器获取响应。有一个代码sn-p:

 $url = "https://book.some-site.com/cgi-bin/booking-form.cgi";

 $uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388    Version/12.14";

 $ch = curl_init( $url );

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);        
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_ENCODING, "");     
curl_setopt($ch, CURLOPT_USERAGENT, $uagent);  
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); 
curl_setopt($ch, CURLOPT_TIMEOUT, 0);          
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

$content = curl_exec( $ch );
$err     = curl_errno( $ch );
$errmsg  = curl_error( $ch );
$header  = curl_getinfo( $ch );
curl_close( $ch );

一切正常,直到我们在其中一个页面上点击加载屏幕。我们从网络服务器得到以下响应“...

我们正在处理您的请求...
很快就会显示您的搜索结果。

”这是一个加载/等待屏幕。之后我们什么也得不到。 在加载屏幕后在浏览器中工作时,会显示实际响应。 任何想法如何绕过加载屏幕获得实际响应?

提前致谢。

【问题讨论】:

  • 仅供参考,在抓取其他网站时使用虚假用户代理标识自己通常被认为是不礼貌的(您似乎将自己标识为 Opera)。 Here's a short guide to scraping etiquette.
  • 应用程序使用什么类型的重定向?如果它加载了javascript(例如),我认为javascript不会执行。

标签: php html curl


【解决方案1】:

通常,当一个网站有一个加载屏幕,然后显示结果而不将您重定向到新页面时,这意味着他们通过 Ajax 加载了结果。因此,HTML 页面加载时只显示“嘿,它正在加载”消息,然后运行一些 JavaScript,从不同的页面下载实际内容。您需要调查他们的 JS 代码,然后加载他们通过 Ajax 加载的页面。

您可能会考虑在 Web 浏览器的开发人员工具中启用“记录 XMLHttpRequests”,以便更轻松地确定他们通过 Ajax 加载的页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 2010-09-19
    • 2013-12-31
    • 1970-01-01
    相关资源
    最近更新 更多