2014-11-26 4 views
1

나는 casperjs 문제가 있습니다. 나는 자바 스크립트로 ID에서 값을 추출 할 수 없다.CasperJS를 사용하여 ID로 입력 값을 추출하려면 어떻게해야합니까?

나는 용어를 검색하는 구글을 열고 있으며, id에 의해 searchbox에서 값을 얻고 싶습니다.

var casper = require('casper').create({ 
    verbose: true, 
    logLevel: "info" 
}); 
var mouse = require("mouse").create(casper); 
var x = require('casper').selectXPath; 
var webPage = require('webpage'); 
var page = webPage.create(); 
casper.userAgent('Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36') 
casper.start("http://www.google.com/ncr", function() { 
    this.echo(this.getTitle()); 
}).viewport(1366, 768); 

//casper.then(function() { 
//this.sendKeys('#gbqfq', 'Duke'); 
//this.click('#gbqfsa'); 
//}); 
casper.waitForSelector(x('//*[@id="gbqfq"]'), function() { 
    this.evaluate(function() { 
     document.getElementById('gbqfq').value = "samearga"; 
     this.echo(this.document.getElementById('gbqfq').value); 
    }); 
    console.log("\nEXISTA SELECTORUL!!! -> document.getElementById('gbqfq').value\n"); 
}); 

casper.waitForSelector(x('//*[@id="gbqfq"]'), function() { 
    this.evaluate(function() { 
     document.forms[0].submit(); 
    }); 
    console.log("\nSUBMITING!!!\n"); 
}); 

casper.wait(4000, function() { 
    console.log("\nFAC POZA\n"); 
    casper.capture('caca.png'); 
}); 

casper.run(); 
+0

내가 검색 할 수 있도록 검색 중입니다. 들여 쓰기는 stackoverflow 코드 기능에 의해 망가졌습니다. 죄송합니다. – user215379

+0

정말 고마워요. – user215379

답변

0

페이지에 입력 값을 가져 오는 두 가지 방법이 있습니다.

  1. 당신은 remote.message 이벤트에 등록하고 페이지

    // at the beginning of the script 
    casper.on("remote.message", function(msg){ 
        this.echo("remote> " + msg); 
    }); 
    
    // inside of the step 
    casper.evaluate(function() { 
        document.getElementById('gbqfq').value = "samearga"; 
        console.log(document.getElementById('gbqfq').value); 
    }); 
    
  2. 에 로그 또는 페이지 문맥에서 문자열을 반환 할 수 있습니다

    // inside of the step 
    var inputValue = casper.evaluate(function() { 
        document.getElementById('gbqfq').value = "samearga"; 
        return document.getElementById('gbqfq').value; 
    }); 
    casper.echo(inputValue); 
    
    당신은 계속해야

마음에 무엇 this 의미합니다. 페이지 컨텍스트 내부 (casper.evaluate 내부) thiswindow을 나타내지 만 window에는 echo 기능이 없습니다. 페이지와 캐스퍼 컨텍스트는 서로 구분되며 (sandboxed) 모든 변수를 사용할 수는 없습니다. docs에 더 있습니다.

+0

나는 그것을 시험해 보았다. 이 스크립트 스크립트는 작동하지 않습니다. –

+0

나는 그것을 시도했다, 첫번째 해결책은 일한다, 당신을 백만 감사하십시오. – user215379

+0

두 번째 작품도 있습니다. – user215379

관련 문제