Я пытаюсь найти способ войти в учетную запись Amazon SellerCentral через PHP, я финансирую этот скрипт
https://github.com/mindevolution/amazonSellerCentralLogin
который теоретически должен работать, но меня перенаправляют на страницу входа каждый раз, когда я запускаю его.
Кроме того, я попробовал PhantomJS + CasperJS, но безуспешно, первая проблема, с которой я столкнулся с этим подходом, заключалась в том, что мне нужно отключить двухфакторную аутентификацию, а вторая проблема заключалась в том, что я получаю капчи, которые я не могу решить с помощью кода.
Вот код CasperJS, который я пробовал:
var urlBeforeLoggedIn = "https://sellercentral.amazon.com/gp/homepage.html";
var urlAfterLoggedIn = "https://sellercentral.amazon.com/";
var casper = require('casper').create({
pageSettings: {
loadImages: false,
loadPlugins: false,
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36'
}
});
casper.start(urlBeforeLoggedIn);
casper.waitForSelector('form[name = "signIn"]', function() {
casper.fillSelectors('form[name = "signIn"]', {
'input[name = "email"]': 'some_username',
'input[name = "password"]': 'some_password'
}, true);
});
casper.waitForUrl(urlAfterLoggedIn, function() {
this.viewport(3000, 1080);
this.capture('./testscreenshot.png', {top: 0,left: 0,width: 3000, height:
1080});
});
casper.run();






не ответ, но слишком длинный для публикации в качестве комментария.
Сделайте нет синтаксический анализ html с помощью регулярного выражения., используйте вместо этого правильный HTML-парсер, например DOMDocument и DOMXPath. У меня нет учетной записи для тестирования, но это должно помочь вам пройти первую страницу входа с правильным адресом электронной почты и паролем,
<?php
declare(strict_types=1);
header("content-type: text/plain;charset=utf-8");
$email = "[email protected]";
$password = "passw0rd";
$ch=curl_init();
curl_setopt_array($ch,array(
CURLOPT_AUTOREFERER => true,
CURLOPT_BINARYTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_CONNECTTIMEOUT => 4,
CURLOPT_TIMEOUT => 8,
CURLOPT_COOKIEFILE => "", // <<makes curl save/load cookies across requests..
CURLOPT_ENCODING => "", // << makes curl post all supported encodings, gzip/deflate/etc, makes transfers faster
CURLOPT_USERAGENT => 'whatever; curl/' . (curl_version() ['version']) . ' (' . (curl_version() ['host']) . '); php/' . PHP_VERSION,
CURLOPT_RETURNTRANSFER=>1,
CURLOPT_URL=>'https://sellercentral.amazon.com/gp/homepage.html',
));
$html=curl_exec($ch);
//var_dump($html) & die();
$domd=@DOMDocument::loadHTML($html);
$xp=new DOMXPath($domd);
$form=$xp->query("//form[@name='signIn']")->item(0);
$inputs=[];
foreach($form->getElementsByTagName("input") as $input){
$name=$input->getAttribute("name");
if (empty($name) && $name!= = "0"){
continue;
}
$inputs[$name]=$input->getAttribute("value");
}
assert(isset($inputs['email'],$inputs['password'],
$inputs['appActionToken'],$inputs['workflowState'],
$inputs['rememberMe']),"missing form inputs!");
$inputs["email"]=$email;
$inputs["password"]=$password;
$inputs["rememberMe"] = "false";
$login_url=$form->getAttribute("action");
var_dump($inputs,$login_url);
curl_setopt_array($ch,array(
CURLOPT_URL=>$login_url,
CURLOPT_POST=>1,
CURLOPT_POSTFIELDS=>http_build_query($inputs)
));
$html=curl_exec($ch);
$domd=@DOMDocument::loadHTML($html);
$xp=new DOMXPath($domd);
$loginErrors=[];
// warning-message-box is also used for login *errors*, amazon web devs are just being stupid with the names.
foreach($xp->query("//*[contains(@id,'error-message-box')]|//*[contains(@id,'warning-message-box')]") as $loginError){
$loginErrors[]=preg_replace("/\s+/"," ",trim($loginError->textContent));
}
if (!empty($loginErrors)){
echo "login errors: ";
var_dump($loginErrors);
die();
}
//var_dump($html);
echo "login successful!";
важный вывод здесь
$domd=@DOMDocument::loadHTML($domd);
$xp=new DOMXPath($domd);
$form=$xp->query("//form[@name='signIn']")->item(0);
$inputs=[];
foreach($form->getElementsByTagName("input") as $input){
$name=$input->getAttribute("name");
if (empty($name) && $name!= = "0"){
continue;
}
$inputs[$name]=$input->getAttribute("value");
}
именно так большинство страниц входа на веб-сайт можно анализировать на предмет информации для входа.
I'm getting captchas which I can't solve via code
api deathbycaptcha спешит на помощь: http://www.deathbycaptcha.com/user/api