先描述下需求吧:用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,很不稳定,总是莫名就出错
--------------------
总之同步的时候我还是挺清楚的,变成异步我就糊涂了,哪位大神帮我捋捋。
这两个项目都很久没更新了,也没找到类似的代码例子。其实就是几行代码,但总是调不对很郁闷,真心求帮助啊
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/56033
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.