• @kidult ,谢谢回复,考虑到目前有些技术难度,所以打算找人一起实现呢,工期大约半年,因为目前也是在职,所以可能是业余时间搞,估计会耗费很多休息时间,如果报低了觉得不合算,要个 30 万中不中

  • 下载下来的图片怎么 render 到页面啊?搞了半天没出来

  • 我做

  • 我建立的任务,项目组的其他人可以删除?

  • 任务没有设定日期的功能?

  • 直接找一个会前端的 railser 就 OK 了,告诉他你的 repo,一切就 ok 了

  • 关于网页抓取的学习历程 at 2014年08月28日

    @wudixiaotie Mechanize 能够自动管理 cookie,不需要你 load 一个文件的,之所以用 casperjs 是因为它能够抓取动态内容,mechanize 在这方面还没法做到

  • 关于网页抓取的学习历程 at 2014年08月27日

    @wudixiaotie ,你抓包看一下,在密码框的 keydown 或者 keyup 事件上肯定是绑了事件的,这个事件就是 ajax 请求拿到服务器的 public_key,然后再发送登录请求的时候肯定是把用户输入的密码进行 rsa 加密的了,所以我觉得我们只是利用 setAttribute('value', usr) 或者 attr('val') 肯定是不会触发这个事件的,所以在登录请求的时候肯定是密码错误的

  • 关于网页抓取的学习历程 at 2014年08月27日

    @wudixiaotie 你在

    BID.popLogin()
    

    的后面加上

    this.__utils__.echo('-----------------------')
    this.__utils__.echo(this.__utils__.visible('input#TANGRAM_18__userName'))
    this.__utils__.echo(this.__utils__.visible('input#TANGRAM_18__password'))
    this.__utils__.echo('-----------------------')
    

    试试,我用你的代码测试了下,发现也没面上的这连个 input 并没有显示出来。另外,这个是我的代码;

    var utils = require('utils');
    var casper = require('casper').create({
        verbose: true,
        logLevel: "debug"
    });
    
    
    casper.userAgent('Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:18.0) Gecko/20130119 Firefox/18.0')
    
    
    var usr = casper.cli.get(0);
    
    var passwd = casper.cli.get(1);
    
    
    var index_url = 'http://index.baidu.com/';
    
    casper.start(index_url);
    
    casper.wait(1000, function(){
        this.click('li.navli a[href="javascript:BID.popLogin();"]');
        this.wait(1000,function(){
            this.thenEvaluate(function(usr,passwd){
                this.__utils__.echo('-----------------------')
                this.__utils__.echo(this.__utils__.visible('input#TANGRAM_18__userName'))
                this.__utils__.echo(this.__utils__.visible('input#TANGRAM_18__password'))
                this.__utils__.echo('-----------------------')  
    
                document.querySelector('#TANGRAM_18__userName').setAttribute('value', usr);
                document.querySelector('#TANGRAM_18__password').setAttribute('value', passwd);
                this.wait(1000,function(){
                    this.click('#TANGRAM_18__submit');
                });
            },{ 'usr' : usr, 'passwd' : passwd });
    
    
            this.wait(1000,function(){
                this.evaluate(function(){
                    if(this.__utils__.exists('#ubarUname')){
                        this.__utils__.log('-----------login success')
                    }else{
                        this.__utils__.log('-----------login faild')
    
                        if(this.__utils__.visible('#TANGRAM_18__error')){
                            this.__utils__.log('password error ------------')
                        }else{
                            this.__utils__.log('password not error ------------')
                        }
    
                        if(this.__utils__.visible('#TANGRAM_18__verifyCodeImgWrapper')){
                            this.__utils__.log('need verify code ------------')
                        }else{
                            this.__utils__.log('need not  verify code ------------')
                        }
                    }
                })              
            })
        });   
    });
    
    casper.run();
    

    打印出来是

    [debug] [remote] -----------login faild
    [debug] [remote] password error ------------
    [debug] [remote] need not  verify code ------------
    

    从打印出来的结果看,是登陆失败的,失败的原因是密码错误。所以我想,应该是没有调用 js 的加密函数,这也就是我想问的,怎样才能执行这个加密函数,因为我不像费劲的去破解它的加密规则,想让 phantomjs 模拟 webkit 去自动执行。

  • 关于网页抓取的学习历程 at 2014年08月26日

    @sunday35034 这个 gem 貌似不准吧

  • 关于网页抓取的学习历程 at 2014年08月26日

    @wudixiaotie ,有时间的话,可以看下百度指数的页面:http://index.baidu.com

    这里的登录用的是非对称加密,我试着登录,发现总是会收到用户名或密码错误的提示,觉得应该是客户端加密的代码没有在 casperjs 里面执行导致的,所以不知道 casperjs 能否直接执行这些加密代码,如果能的话,就没必要自己破解了。还有个问题就是,如果我用代理的话,只要是境外的代理,必然让我输入验证码,这个验证码不知道楼主是怎么解决的,难不成每次都要请求下验证码的地址,拿到图片后人工识别并手动输入?

  • 关于网页抓取的学习历程 at 2014年08月26日

    @wudixiaotie 如果爬虫的目标网站需要登录,并且是那种 js popup 那种,而且在 input 筐中的 password 是经过客户端 js 加密处理的,这种情况是不是也可以用 casperjs 解决,因为发现只要目标网站的加密规则一变,自己就得重新处理解密的代码,所以,我想,能不能直接利用 casperjs 来跑目标网站的加密 js,不知道你有遇到过这种情况没有

  • 关于网页抓取的学习历程 at 2014年08月21日

    @flowerwrong 那直接就 node + phantomjs 算了

  • 关于网页抓取的学习历程 at 2014年08月21日

    @flowerwrong ,你说的性能问题指的是哪里?查找元素的时候还是在模拟用户操作的时候?

  • 关于网页抓取的学习历程 at 2014年08月21日

    phantomjs 不错,还有个适用于 capybara 的 driver,叫 poltergeist,有需要的可以研究一下

  • git ls-files -z 问题 at 2014年08月13日

    @AlphaLiu 好吧,说服我了。。。。

  • 谢谢两位的指点

  • @andor_chen ,邮件已经发送,有时间的话可以看一下。

  • 今天晚上啊,就是从帖子的链接中进去的,但是我进入的是http://leanpub.com/deploying_rails_applications-cn/c/2014Tanabata

  • @andor_chen ,我只收到了这个,其他的邮件没有收到

  • @andor_chen 已在 leanpub 上购买,怎样能确认收到货?

  • @huacnlee 谢谢指点,经过验证,确实是,而且是存储在当前的 agent 对象的。在使用中还遇到一个问题就是,在某些页面中的登录框是 js 生成的一个 popup,对于这样的页面内容,machanize 应该是抓取不到的,这种情况要用什么处理?capybara 么?

  • @huacnlee 有个问题想问你,按照你所说:“模拟表单填写帐号密码,然后提交表单就可以了呀,不用 hack Cookie 的”,意思是说,只要用 machanize 在目标网站登录一次了,以后的每个页面的请求都不用再次登录了?比如说,有个目标网站,我访问前 3 个页面的时候不需要我登录,但是第四个的时候就把我 redirect 到了登录页面,这个时候我用 machanize 登录,目标网站的 server 端记住了我的 session 并在浏览器中设置了 session_id 的一个 cookie 那我在以后的页面访问的时候,都是自动带着这个 cookie 的?如果是这样的话,machanize 是怎那样抓取到 cookie 并在下次的 request 中带着这个 cookie 的?