我正试图抓取Purestorage Career page来提取温室工作清单。当我尝试通过PhantomJS加载页面时,我有时会看到包含温室作业列表job的完整呈现页面,有时我只会获得没有温室网址的部分呈现页面。
查看Purestorage career page的网页来源,我看到以下代码
<div class="container" data-component-name="embed-greenhouse" data-component-url="/api/jobs/v1/jobs.ws.json">
<div id="alert-container" class="container">
</div>
<div class="row">
<div class="col-sm-12 results-col" id="greenhouse">
</div>
</div>
</div>
他们似乎是通过向json url发出GET请求来加载作业。但是,PhantomJS并不总是提出这个要求。
如何确保PhantomJS正在进行所有AJAX调用。这是否因为这个特定网站上的特殊代码结构而发生?
编辑: 我正在使用Phantomjs 2.1.1。我还尝试在加载页面之前清除缓存,但没有运气。
page.clearMemoryCache();
答案 0 :(得分:0)
这是一个缓存问题,但你是对的,PhantomJs 2.1.1似乎不尊重clearCache请求。我使用PhantomJsCloud.com处理此问题的方法是删除磁盘缓存并在发出清除缓存请求时重新启动实例。
答案 1 :(得分:0)
我在这里发现了这个问题。在这种特殊情况下,PhantomJS将页面加载视为“完成”。甚至在加载异步JSON文件之前就已经完成了。在页面加载后添加1秒的延迟使脚本有足够的时间将Greenhouse数据加载到页面中。