2016-07-05 54 views
1

我的目標是注:用PhantomJS注入Javascript的正確語法是什麼?

javascript document.getElementById("pickupZip").value = "90049"; 
document.getElementById("refreshStoresForZipPop").click(); 

與PhantomJS網站。這是我的inject.js文件中的所有代碼,我在控制檯中得到了這個:SyntaxError: Expected an identifier but found "document" instead,所以我知道這是錯誤的語法,雖然我找不到顯示正確的地方。這裏是我的PhantomJS文件代碼:

var webPage = require('webpage'); 
 
var page = webPage.create(); 
 

 
page.open('http://shop.advanceautoparts.com/p/purolator-classic-air-filter-a24278/5792304-P?navigationPath=L1*14934/', function(status) { 
 
    var success = phantom.injectJs('inject.js'); 
 
    console.log(success); 
 
    if (status === "success") {     
 
     page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js', function() { 
 
      page.render('advanceautoparts.png'); 
 
      phantom.exit(); 
 
     }); 
 
    } 
 
});

回答

1

使用evaluate

var webPage = require('webpage'); 
var page = webPage.create(); 

page.open('http://shop.advanceautoparts.com/p/purolator-classic-air-filter-a24278/5792304-P?navigationPath=L1*14934/', function(status) { 
    var success = phantom.injectJs('inject.js'); 
    console.log(success); 
    if (status === "success") {     
     page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js', function() { 
      page.evaluate(function(s) { 

       document.getElementById("pickupZip").value = "90049"; 
       document.getElementById("refreshStoresForZipPop").click(); 

       }); 
      page.render('advanceautoparts.png'); 
      phantom.exit(); 
     }); 
    } 
}); 

參考:http://phantomjs.org/api/webpage/method/evaluate.html

+0

我已嘗試之前,問題是什麼的評估函數內部運行。我通過放置一個console.log來測試它,它永遠不會被記錄,也不會在屏幕截圖中發生預期的變化。 – traw1234

+0

@ traw1234您是否訂閱了[onConsoleMessage](http://phantomjs.org/api/webpage/handler/on-console-message.html)以便能夠從頁面內部接收console.log()輸出? – Vaviloff

+0

@sudipto另外我想你應該稍等一下再做一個截圖,以便目標網站有時間去搜索那個自動播放器。 – Vaviloff