PhantomJs连NodeJs,搞不定异步啊,求帮助求帮助

PhantomJs连NodeJs,搞不定异步啊,求帮助求帮助,第1张

PhantomJs连NodeJs,搞不定异步啊,求帮助求帮助,第2张

先描述下需求吧:用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,很不稳定,总是莫名就出错

--------------------
总之同步的时候我还是挺清楚的,变成异步我就糊涂了,哪位大神帮我捋捋。
这两个项目都很久没更新了,也没找到类似的代码例子。其实就是几行代码,但总是调不对很郁闷,真心求帮助啊 ----------------------- 以下是精选回复-----------------------

答:我也遇到这情况。最先也是用这两个 package,但满足不了需求。
最终解决方法是把 phantom.js 的逻辑写在单独一个文件里面,不使用那两个 package 了,再通过调用 child_process 模块去执行文件,通过该文件的不同返回来判断是否满足条件,要用到 phantom.js 的 evaluate.

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » PhantomJs连NodeJs,搞不定异步啊,求帮助求帮助

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情