php - 如何使用 headless 浏览器从 PHP 提供 AJAX 应用程序的 HTML 快照?

标签 php javascript headless-browser

在弄清楚如何启动 headless 浏览器来提供使用 javascript(具体来说是 sammy.js,具体来说是 sammy.js)来传送 AJAX 内容的站点的静态 HTML 快照时遇到了真正的麻烦。

我正在研究 Google 的使 AJAX 应用程序可抓取的规范:

http://code.google.com/web/ajaxcrawling/docs/getting-started.html

这在很大程度上非常好而且非常清楚,而且我在选择 ?_escaped_fragment_ URL 时没有任何问题。

大部分模板都是在服务器端完成的,所以我很想写一个 PHP 快照构建文件,它使用来自 sammy 应用程序代码(有很多路由)的相同正则表达式匹配以包含在各种模板文件中.然而,很多操作发生在 javascript 应用程序中,因此这意味着在 PHP 中镜像所有这些处理,这意味着同时维护两个文件,跨语言 - 这是大量的工作!

现在,我了解到您可以使用 Headless Browser 来“呈现”页面并执行所有 javascript(匹配 #!/路由并为请求提供正确的内容),然后返回整个 DOM 内容作为 HTML,将提供给 googlebot。

我搜索了很长时间,但找不到任何关于从 PHP 运行 headless 浏览器的分步指南(对于所有 Java 新手)。我想这意味着我只是不知道要搜索什么。

我想知道的是:设置和使用 headless 浏览器来提供这些 HTML 快照是否需要更多工作?如果是这样,是否值得这样做?

此外,如果您有任何指南可以指给我看,那就太好了!

谢谢!

乔斯

最佳答案

我认为您最好在服务器上复制您在客户端获得的内容。尽管这似乎是一项低效的工作,但它至少有一个明确且有限的范围。

大多数著名的 headless 浏览器都被设计为应用程序开发的测试工具。因此,它们的结构非常开放,如果您负责应用程序的 QA,这是一件好事,但如果您希望只做一件特定的事情

我用了Selenium-RC在特定项目上只做一件特定的事情,并发现处理所有与 Selenium 相关的问题很快就变成了一个项目本身。尽管 Selenium-RC 肯定可以完成您想要做的事情,但考虑到您想要完成的事情的特殊性,这似乎是一个巨大的 promise 。

(我自己是一个完全的 Java 业余爱好者,我不能真正评论 HTMLUnit,但仅就规范而言,它似乎比 Selenium-RC 更适合您的需求。尽管如果使用它有一些相同的设置和管理要求。)

所以回到在 PHP 中复制所有内容的替代方案......

请记住,您不需要 HTML 快照中的所有内容都与浏览器中的内容完全相同:只要您拥有核心内容和关键导航链接,GoogleBot 就会拥有大部分内容它需要的一切。您是否还需要将网站上的每个页面都编入索引?或者您能否确定几条真正最重要的路线,并提供这些路线的快照?您还可以使用网络分析或服务器日志数据来更好地告知快照优先级。

关于php - 如何使用 headless 浏览器从 PHP 提供 AJAX 应用程序的 HTML 快照?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5221569/

相关文章:

php - 我如何使用 php 和 mysql 上传音乐

javascript - 如何将 "transfer"变量传递到 Node Express 路由器中的 Promise 链?

javascript - 记录客户端错误和 "Script error"

python - PhantomJS + Selenium Webdriver + Python 程序执行异常

javascript - 使用 Java 或 JavaScript 将 HTML 页面与 CSS 一起转换为 PDF

php - 如何根据条件向数组添加一些项目?

PHP,preg_replace 中的嵌套模板

javascript - 为什么这个 onchange 事件不起作用?

google-chrome - 在没有 xorg 的情况下在 linux 上运行 chrome headless

php - 对多维关联数组进行排序?