先描述下需求吧:用PhantomJs抓取某网站,需要先登录(模拟点击提交表单),确认登录成功后,访问一串固定格式生成的url
PhantomJs本身是异步的,要以同步方式使用当初用 setInterval + flag标志位,每完成一步再执行下一步,这个没问题
现在我想把Phantom作为node的一个模块来用,方便调度和存储,现成的实现有两个:
phantomjs-node
https://github.com/sgentle/phantomjs-node这个是异步的,全部通过回调来执行下个步骤。可能是我对这种模式不了解或者封装的说明不太清楚,搞不定的地方在于登录提交表单之后 (sendEvent('click',xx,xx) ), 没办法获取登录是否成功的状态,因为是异步的,点击之后自动跳转到新页面的过程不知道在哪里插入接下来的代码,也不知道在phantomjs-node下如何监听页面的状态变化事件。
另外一个node-phantomjs-sync是基于phantomjs-node的
https://github.com/sebv/node-phantomjs-sync同步模式,顺序倒是清楚,但问题也在sendEvent('click',xx,xx)上,每次模拟点击之后,页面还是处在未登录的状态,不知道为啥?另外这个实现用了fibers,很不稳定,总是莫名就出错
--------------------
总之同步的时候我还是挺清楚的,变成异步我就糊涂了,哪位大神帮我捋捋。
这两个项目都很久没更新了,也没找到类似的代码例子。其实就是几行代码,但总是调不对很郁闷,真心求帮助啊