PhantomJS无法正确提供JS和CSS文件

时间:2014-11-28 11:47:50

标签: node.js web-crawler phantomjs single-page-application

我有一个节点服务器正在运行并正在侦听端口8080.有一个mod_rewrite规则处于活动状态,可以将Bots重定向到此端口。

RewriteCond %{HTTP_USER_AGENT} (googlebot|adsbot-google|bingbot|msnbot|psbot|gigabot|twitterbot|linkedinbot|yahoo-mmcrawler|pingdom\.com_bot) [NC]
RewriteRule ^ http://127.0.0.1:8080%{REQUEST_URI} [P]

节点脚本依赖于phantomjs脚本来打开Bots请求的任何URL并返回内容。

从这里获取的代码http://backbonetutorials.com/seo-for-single-page-apps/

我通过在本地计算机上运行phantomjs并使用相同的phantomjs代码直接请求我的网页来测试这一点。 结果与“抓取谷歌”表示的结果相同(谷歌网站管理员工具),这是由phantomjs无法正确提供CSS和JS文件。

CSS文件仅包含

<html><head></head><body></body></html>

并没有实际的CSS内容。 JS文件有

<html><head></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">

在任何JS代码之前插入。

因此,当谷歌尝试抓取并呈现网页时,布局就会中断,并且会抛出JS错误。

任何提示?感谢。

1 个答案:

答案 0 :(得分:2)

好的。我找到了解决方案。

您为每个请求使用probablly page.content。您只需要将它用于html文件。这是我的代码:

    if (url.indexOf('.html') > -1) cb(page.content);
    else cb(page.plainText);

第二种解决方案需要更改htaccess。

RewriteCond %{HTTP_USER_AGENT} (googlebot|adsbot-google|bingbot|msnbot|psbot|gigabot|twitterbot|linkedinbot|yahoo-mmcrawler|pingdom\.com_bot) [NC]
RewriteCond %{REQUEST_URI} (.*).html(.*) <---- ADDED THIS ONE
RewriteRule ^ http://%{HTTP_HOST}:3004%{REQUEST_URI} [P]