LINUX.ORG.RU
ФорумTalks

Запилил говноскрипт на перле, чтоб посмотреть как там дела на сберовских картах

 , , , ,


6

2

Проверял с ФФ/geckodriver и selenium-server-standalone.

Поставить нужно

- selenium-server-standalone 3.12.0-1

- perl-selenium-remote-driver 1.28-1

- geckodriver 0.20.1-1

ну и файрфокс.

java -jar /usr/share/selenium-server/selenium-server-standalone.jar
#!/usr/bin/perl -w
#
# Dump sberbank card list and payments history
#
# Usage:
#   $0 <login> <password>
#

use utf8;
use Selenium::Remote::Driver;

$login = shift @ARGV;
$password = shift @ARGV;

binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");

print STDERR "Starting browser\n";
my $driver = Selenium::Remote::Driver->new_from_caps(
	'desired_capabilities' => {
		'browserName' => 'firefox',
		'moz:firefoxOptions' => {
			'args' => [ '--safe-mode', '--headless' ]
#			'args' => [ '--safe-mode' ]
		}
	});

print STDERR "Logging in\n";
$driver->get('https://online.sberbank.ru/CSAFront/index.do');
$driver->find_element_by_id('login')->send_keys($login);
$driver->find_element_by_id('password')->send_keys($password);
$driver->get('javascript:validateAndSubmit()');

print STDERR "Getting info";
my @products = ();
while(scalar @products == 0) {
	@products=$driver->find_elements("//div[\@class='forProductBorder mainProductInfo']");
	sleep(1);
	print STDERR ".";
}
print STDERR "\n";

$driver->get('https://node1.online.sberbank.ru/PhizIC/private/cards/list.do');
print STDERR "Getting info";
@products = ();
while(scalar @products == 0) {
	@products=$driver->find_elements("//div[\@class='productCover activeProduct ']");
	sleep(1);
	print STDERR ".";
}
print STDERR "\n";

my %products = ();
foreach $p (@products) {
	$name_el=$driver->find_child_element($p, "./div//span[\@class='mainProductTitle mainProductTitleLight']");
	$name=$name_el->get_text();
	$open=$name_el->get_attribute('onclick', 1);
	$amount=$driver->find_child_element($p, "./div//span[\@class='overallAmount nowrap']")->get_text();
	$number=$driver->find_child_element($p, "./div//div[\@class='accountNumber decoration-none']")->get_text();
	if($number =~ / (\d{4}),/) {
		$n = "card#".$1;
	} else {
		$n = "rand#".int(rand(10000)); # TODO: fixme
	}
	$products{$n}{'number'} = $number;
	$products{$n}{'amount'} = $amount;
	$products{$n}{'open'} = $open;
	$products{$n}{'name'} = $name;
	print "$name = $amount\n\t$number\n\t$open\n";
}
print "\n\n";

foreach $p (keys %products) {
	$open = $products{$p}{'open'};
	$name = $products{$p}{'name'};
	$driver->get("javascript:".$open);
	print STDERR "Getting history for $p ($name)";
	my @history = ();
	while(scalar @history == 0) {
		@history=$driver->find_elements("//table[\@class='tblInf']");
		sleep(1);
		print STDERR ".";
	}
	print STDERR "\n";
	sleep(2); # TODO: fix this hack!
	$history=$driver->find_element("//table[\@class='tblInf']");
	@items=$driver->find_child_elements($history, "./tbody//tr[\@class='ListLine0'] | ./tbody//tr[\@class='ListLine1']");
	foreach $i (@items) {
		$name=$driver->find_child_element($i, "./td[\@class='align-left leftPaddingCell']")->get_text();
		$date=$driver->find_child_element($i, "./td[\@class='listItem']")->get_text();
		$amount=$driver->find_child_element($i, "./td[\@class='align-right']")->get_text();
		print "\t$date, $amount, $name\n";
	}
	print "\n\n";
}

print STDERR "Quit\n";
$driver->quit();
★★★★★

Ответ на: комментарий от bvn13

Примерно так:

Starting browser
Logging in
Getting info.......
Getting info.
XXX - Visa Classic = XXX руб.
	•••• XXXX, действует по XXX
	showFullInfo('/PhizIC/private/cards/info.do?id=XXX');
XXX - MIR = XXX руб.
	•••• XXXX, действует по XXX
	showFullInfo('/PhizIC/private/cards/info.do?id=XXX');


Getting history for card#XXXX (XXX - MIR)..
        .....история платежей.....

Getting history for card#XXXX (XXX - Visa Classic).
        .....история платежей.....

Quit
sergej ★★★★★
() автор топика

Вместо того, чтобы предоставить пользователям адекватный API, приходится пилить костыли.

Спасибо, попробую сделать для своего банка похожее, можно прямо в conky закинуть.

Pravorskyi ★★★
()
Ответ на: комментарий от Pravorskyi

Я потихоньку пилю вечерами для юникредита наверное соберусь для альфы...

sergej ★★★★★
() автор топика
Ответ на: комментарий от Sadler

2й фактор появляется когда хочешь что-то сделать, а не просто посмотреть. В юникредите точно также. В альфе - смска для входа нужна.

Подумаешь посмотрит кто-то на мои копеечки :)

sergej ★★★★★
() автор топика

А что все это делает?

dk-
()
Ответ на: комментарий от fornlr

Я в яваскриптах не силён. Как это запустить, чтоб он мне в консольку вывалил текстом?

sergej ★★★★★
() автор топика
Ответ на: комментарий от sergej

Весьма интересная штука, не знал про MAXS.

Deleted
()

Я один про однострочник вспомнил?

demrnd
()
Ответ на: комментарий от ncrmnt

Скажи ему чтоб не просил, там в настройках есть галочка «Требовать одноразовый пароль при входе».

sergej ★★★★★
() автор топика
Ответ на: комментарий от sergej

Не, я ее убирать, пожалуй, не буду. А баланс и так получаю в financisto, который парсит SMSки

ncrmnt ★★★★★
()
Последнее исправление: ncrmnt (всего исправлений: 1)
Ответ на: комментарий от sergej

А как ты умудряешься пользоваться Сбербанк.онлайн без двухфакторной авторизации? Оно же там обязательное, не?

// Мне из-за этого даже пришлось мобильник завести. >_<

r3lgar ★★★★★
()
Ответ на: комментарий от r3lgar

Для входа оно выключается галочкой в настройках. Для операций естественно не выключается.

sergej ★★★★★
() автор топика
Ответ на: комментарий от Pravorskyi

API

Внезапно, он там есть, документацию пользовалю никто не отдаст, потому что это банк, а не социальная сеточка.

А в данном примере можно спокойно без селениума обойтись, как - я конечно не скажу

Dred ★★★★★
()
Ответ на: комментарий от Int0l

Ага, ты ещё предложи принимать SMS на мобильник товарища по палате.

r3lgar ★★★★★
()
Ответ на: комментарий от sergej

Для входа оно выключается галочкой в настройках.

Блгдр.

Для операций естественно не выключается.

Ещё бы оно отключалось. Тогда мне пришлось бы сменить банк на меньшее ШЕРЕТО.

r3lgar ★★★★★
()
Ответ на: комментарий от Deleted

Один из крупнейших европейских банков (не буду рекламировать, но он датский) использует только и только яву везде.

Deleted
()

небезопасно выводить такое на экран, вдруг кто увидит.

eR ★★★★★
()
Ответ на: комментарий от Deleted

Выдает платформу и доступ к потенциальным уязвимостям. Да и длина урл на три символа короче могла быть, даже index.php пережиток прошлого.

Frost ★★★
()
Ответ на: комментарий от Frost

Оно еще и в заголовках ответа светится, и поди в html'ке есть какие-нибудь фреймворко-специфичные вещи. Строить безопасность банковской системы на неизвестности - д***ебизм чистой воды.

Deleted
()
Ответ на: комментарий от Frost

X-Powered-By Servlet/3.0

Что какбы тоже на джаву намекает.

Deleted
()

Запустил скрипт, он перевёл все мои 228 рублей на неизвестный счёт, куда писать претензию?

f1u77y ★★★★
()
Ответ на: комментарий от Pravorskyi

Я про доступ API для обычного пользователя

а я про какого ?

Почему?

не хочу лишать тебя шанса угадать самому

Dred ★★★★★
()
Ответ на: комментарий от Dred

потому что это банк, а не социальная сеточка

потому что это совковый сбер.

приличные банки не только дают, но даже и стандартизуют!

HBCI - HomeBanking Computer Interface

HBCI is a bank-independent online banking standard, developed by the German Central Banking Committee

ну и дальше нагуглишь...

sergej ★★★★★
() автор топика
Ответ на: комментарий от sergej

совковый сбер.

ты видел европейские банки ? Серьезно, там онлайн клиенты остановились в развитии где-то в 90x. Я хоть и стремлюсь переехать при первой же возможности, но в техническом плане российский банкинг и оплата в целом сильно уделывает большинство. Как минимум бесконтактная оплата одна из первых появилась. Тинькофф например вообще скорее IT-компания, которая случайно еще и банк. И все это на волне лютой внутренней конкуренции в техническом оснащении. Но у вас тут все что в РФии делают - софковое, все что не на Си - жрущее ненужно и тд

нагуглишь

зачем мне гуглить если достаточно использовать знание сетевого стэка

Dred ★★★★★
()
Ответ на: комментарий от Dred

Ну тем не менее у этих проклятых буржуев есть HBCI, OFX Direct Connect и EBICS, которые умеет aqbanking и соответсвенно gnucash. Мож у них нет «нормальных онлайн клиентов» просто потому, что они им нахрен не нужны?

sergej ★★★★★
() автор топика
Ответ на: комментарий от sergej

gnucash

кроме 1% это кто-то использует ?

они им нахрен не нужны

ну да, не нужны, то-то переехавшие жалуются, что с банкингом беда и даже дебетками никто не пользуется

Синдром утенка он такой

Dred ★★★★★
()
Ответ на: комментарий от Dred

кроме 1% это кто-то использует ?

я не знаю сколько народа её используют и почему поуехавшие жалуются.

Но у них есть _стандарты_ с кучей реализаций в разном софте, а у нас - сбербанк-онлайн.

sergej ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.