Я довольно новичок в PhantomJS и вообще программирую, поэтому, пожалуйста, несите меня. Я пытаюсь написать код для входа в свою учетную запись Amazon и добавить адреса доставки в свою адресную книгу. Код, который я использую, приведен здесь:
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); };
Иногда это работает, но большую часть времени я получаю капчу или сообщение от Amazon, говорящее «Пожалуйста, включите Cookies для продолжения». Этот пост ( Amazon Seller Central Login Scrape PhantomJS + CasperJS ), кажется, может иметь какое-то решение, но у меня есть небольшая проблема с пониманием этого. Может ли кто-нибудь объяснить в несколько более простых условиях, как это сделать без каких-либо проблем с Amazon?
Еще несколько вопросов, если вы не возражаете: я запускаю этот код локально из своего дома … так вот мой IP-адрес сейчас в каком-то подозрительном списке IP-адресов Amazon? Может ли / запретить мою учетную запись для этого? Мне бы очень хотелось потерять мой аккаунт над чем-то вроде этого. Может быть, я должен использовать прокси-сервер? Есть ли что-то лучше, чем PhantomJS для этого?
Извините за загруженный вопрос и спасибо!
Я думаю, amazon отправляет cookie через изображения тоже. Поэтому не отключите загрузку изображений. Убедитесь, что вы перемещаетесь с одной страницы на другую только после полной загрузки страницы. Вот несколько предложений по проблеме captcha.