Javascript Amazon登录幻影JS

Javascript Amazon登录幻影JS,javascript,php,phantomjs,amazon,Javascript,Php,Phantomjs,Amazon,我对PhantomJS和编程都是新手,所以请耐心听我说。我正试图编写一个代码来登录我的亚马逊帐户,并将发货地址添加到我的通讯簿中。我使用的代码如下: var steps=[]; var loadInProgress = false;//This is set to true when a page is still loading /*********SETTINGS*********************/ var webPage = require('webpage'); var p

我对PhantomJS和编程都是新手,所以请耐心听我说。我正试图编写一个代码来登录我的亚马逊帐户,并将发货地址添加到我的通讯簿中。我使用的代码如下:

var steps=[];
var loadInProgress = false;//This is set to true when a page is still loading

/*********SETTINGS*********************/


var webPage = require('webpage');
var page = webPage.create();
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 10.0; WOW64)      AppleWebKit/537.36     (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36';
page.settings.javascriptEnabled = true;
page.settings.loadImages = false;//Script is much faster with this field set to false
phantom.cookiesEnabled = true;
phantom.javascriptEnabled = true;

/*********SETTINGS END*****************/

console.log('All settings loaded, start with execution');  
page.onConsoleMessage = function(msg) {
    console.log(msg);
};
/**********DEFINE STEPS THAT FANTOM SHOULD DO***********************/
steps = [

     //Step 1 - Open Amazon home page
     function(){
         console.log('Step 1 - Open Amazon home page');
         page.open("https://www.amazon.com/gp/css/account/address/view.html?ie=UTF8&ref_=myab_view_new_address_form&viewID=newAddress&", function(status){      
         });
     },

     //Fill out login info
     function(){
         console.log('Step 2 - Populate and submit the login form');
         page.evaluate(function(){
             document.getElementById("ap_email").value= "my email";
             document.getElementById("ap_password").value="my password";
             document.getElementById("signInSubmit").click();
         });
     },

     //Write out webpage
         function(){
             var fs = require('fs');
             var result = page.evaluate(function() {
                     return document.querySelectorAll("html")[0].outerHTML;
                 });
             fs.write('AmazonPage1.html',result,'w');

         },

     //Fill out shipping info
         function(){
             console.log('Step 3 - Populate and submit the shpping info');
             page.evaluate(function(){

                 document.getElementById("enterAddressFullName").value= "name";
                 document.getElementById("enterAddressAddressLine1").value="address";
                 document.getElementById("enterAddressCity").value="city";
                 document.getElementById("enterAddressStateOrRegion").value="state";
                 document.getElementById("enterAddressPostalCode").value="zip";
                 document.getElementById("enterAddressPhoneNumber").value="phone";

                 document.getElementById("myab_newAddressButton").click();
             });

     },

     //Write out webpage
         function(){
             var fs = require('fs');
             var result = page.evaluate(function() {
                     return document.querySelectorAll("html")[0].outerHTML;
                 });
             fs.write('AmazonPage2.html',result,'w');

         }

     ];
/**********END STEPS THAT FANTOM SHOULD DO***********************/



//Execute steps one by one
interval = setInterval(executeRequestsStepByStep,50); 

var testindex = 0;

function executeRequestsStepByStep(){
    if (loadInProgress == false && typeof steps[testindex] == "function" ) {
        steps[testindex]();
        testindex++;
    }

    if (typeof steps[testindex] != "function") {
        console.log("test complete!");
        phantom.exit();
    }

}

/**
 * These listeners are very important in order to phantom work properly. Using these listeners, we control loadInProgress marker which controls, weather a page is fully loaded.
 * Without this, we will get content of the page, even a page is not fully loaded.
 */
page.onLoadStarted = function() {
    loadInProgress = true;
    console.log('Loading started');
};
page.onLoadFinished = function() {
    loadInProgress = false;
    console.log('Loading finished');
};
page.onConsoleMessage = function(msg) {
    console.log(msg);
};
有时它是有效的,但大多数时候我都会收到来自亚马逊的验证码或消息,上面写着“请继续启用Cookies”。这篇文章()似乎有一些解决办法,但我在理解上有点困难。有没有人能用更通俗的术语解释一下,如何在不遇到亚马逊问题的情况下实现这一点

如果你不介意的话,还有一些其他问题: 我正在我家本地运行这段代码…我的IP地址现在在亚马逊的“可疑IP列表”上吗?他们能/会为此禁止我的帐户吗???我不想因为这样的事情而失去我的帐户。也许我应该使用代理?有没有比PhantomJS更好的方法


对于加载的问题,非常抱歉,谢谢!

我认为亚马逊也通过图像发送cookie。因此不要禁用图像加载。确保只有在页面完全加载后才能从一个页面移动到另一个页面。以下是验证码问题。

我认为亚马逊也通过图像发送cookie。因此,不要禁用图像加载。请确保您是正确的只有在页面完全加载后才能从一个页面切换到另一个页面。这是验证码问题。

我是问最后一个问题的人。我多年来一直在制造亚马逊支持的刮板,但还没有完全解决问题。如果我找到答案,我会告诉全世界。我仍然会每隔几个月获得验证码。是的,他们会禁止你的home IP,你将成为SOL。我使用EC2弹性IP。嗨,肖恩,谢谢你的评论。使用弹性IP比私人代理有优势吗?此外,他们可能会禁止你的IP,但他们会禁止你的帐户吗?例如,如果他们注意到某个帐户经常与该IP关联。我从来没有禁止过帐户。但我有一个captcha在用户帐户上,而不是在IP上。无论我使用哪台计算机,我都必须解决验证码问题。只要你的旋转IP,你应该可以,但是旋转IP服务的问题是,它们可能已经被阻止:/Hey Sean(或任何人)…为什么不将Selenium与代理IP结合使用。似乎这样可以绕过这些问题?这都是一样的。Phantom和Selenium都是虚拟浏览器,如果一个浏览器被阻止,另一个浏览器也会被阻止。我是问最后一个问题的人。我多年来一直在制造亚马逊支持的刮板,但还没有完全解决这个问题。如果我能弄明白,我会告诉全世界。我仍然会每隔几个月收到一次验证码。是的,他们会禁止你的家庭IP,你就是索尔。我使用EC2弹性IP。嗨,肖恩,谢谢你的评论。使用弹性IP比使用私人代理有什么优势吗?另外,他们可能会禁止你的IP,但他们会禁止你的帐户吗?例如,如果他们注意到了e某个帐户经常与该IP关联。我从未禁止过帐户。但我在用户帐户上使用了验证码,而不是IP。无论我使用哪台计算机,我都必须解决验证码问题。只要你的旋转IP你应该可以,但旋转IP服务的问题是,它们可能已经是blocked:/Hey Sean(或任何人)…为什么不将Selenium与代理IP结合使用。这似乎可以绕过这些问题?这是一样的。Phantom和Selenium都是虚拟浏览器,如果一个浏览器被阻止,那么另一个浏览器也会被阻止。