[megoldva] dijnet.hu -ról az összes régi számla letöltése egyszerűen

Fórumok

Hello!

Van nekem egy dijnet.hu-s előfizetésem. Megvan már pár éve, van benne jó sok számla. Szeretném ezeket letölteni, de sajnos csak egyenként lehet és azt is egy táblázatból kiválasztva, majd klikkelve. Számoltam, kb 2000 klikkelés lenne letölteni mindent, plusz persze az idő. Tud esetleg valaki valami kényelmes megoldást? (az oldalon a kontaktot kérdeztem, sajnos nem segített)

Hozzászólások

Próbáld meg HttpFox segítségével megfejteni a következőket:
- lista lekérés
- egy pdf letöltés
Ezek után némi türelemmel és script segítségével írhatsz olyan wget-et használó scriptet, ami mindent letölt.

Megpróbáltam, egyelőre nem működik.

Ahogy látom, a díjnet oldalán ez lenne a login rész:

<form name="loginform" action="/ekonto/login/login_check_password" method="post">
<input name="vfw_form" type="hidden" value="login_check_password" />
<input name="username" class="text_username" type="text" placeholder="Bejelentkezési név" />
<input name="password" class="text_password" type="password" placeholder="Jelszó" />
<input style="margin-top: 3px;" class="button" type="submit" value="Belépek" />
</form>

Ezek alapján a következővel próbálkoztam:

wget --save-cookies cookies.txt --keep-session-cookies --post-data 'username=FELHASZNALONEV&password=JELSZO' https://www.dijnet.hu/ekonto/login/login_check_password

Erre csinált egy cookies.txt fájlt, amiben ez van:
www.dijnet.hu FALSE /ekonto TRUE 0 JSESSIONID XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

és csinált egy login_check_password fájlt is, de sajnos ez alapján nem sikerült a login és érdekes, de az oldalon szerepel a "Program hiba" szöveg is. Lehet, hogy valami javascriptes dolog van mögötte? Esetleg valakinek van tippje?

Mivel, hogy kaptam egy olyan levelet, hogy

"Mivel a DijNet 2017-től midenkinek fizetőssé teszi a 18 hónapnál
régebbi számlák elérését, szeretném a segítséged kérni hogy
miként sikerült Seleniummal letöltened az összes számlát.
Én Seleniumot eddig még sosem használtam, így minden info, ötlet,
kódrészletért nagyon hálás lennék.

Előre is köszönöm a segítséged! "

Ezért írom, amire emlékszem:

  • a seleniumról IDE kb egy tesztelés támogató eszköz. Arra képes, hogy felvegyen makróba dolgokat, majd később lejátssza a makrót. Ezt egyébként tudja build folyamatból is, tehát pl programozásnál nagyon hasznos, hogy webes felület teszteket lehet vele csinálni. Vagy legalább is, amikor még programoztam, akkor ez volt a mondás :-) Bővebb infó: http://www.seleniumhq.org/ https://en.wikipedia.org/wiki/Selenium_(software)
  • selenium IDE letöltése és installálása pl firefox-hoz: https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/
  • a tools menüben lesz egy selenium IDE menü, válaszd ki
  • az új megjelenő ablakban, file --> open --> betölteni mind a szkripteket)
  • írd át a szkriptekben a LOGIN_XXXXXXX-eket a megfelelő azonosítóra.
  • loginolj be a weboldalon a díjnetbe
  • indítsd a szkriptet.

Fentartom, hogy akkor ez működött és nem mindenre emlékszem már. Ha jól emlékszem, akkor kézzel beloginoltam a díjnet oldalába és utána indítgattam a szkripteket. Ha azóta változott a díjnet oldala, akkor a fentiek már nem működnek, mert a selenium a weboldal felépítéséből tájékozódik. Ha azóta változott a weboldal (akár csak egy gomb ID-ja), akkor a szkripteken is változtatni kell. Leellenőrizni nem tudom a működésüket most, mert akkor megszüntettem a díjnetet, mert nem éreztem őket elég ügyfélközpontúnak.

Itt vannak a kódok is (igen, most ilyen bénán idemásolom őket. Az első sor a fájlnév, aztán a fájl tartalma):


dijbeszedot_kivalasztja_es_mindet_letolti.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="https://www.dijnet.hu/" />
<title>dijbeszedot_kivalasztja_es_mindet_letolti</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">dijbeszedot_kivalasztja_es_mindet_letolti</td></tr>
</thead><tbody>
<tr>
<td>store</td>
<td>1</td>
<td>x</td>
</tr>
<tr>
<td>label</td>
<td>kezdet</td>
<td></td>
</tr>
<tr>
<td>echo</td>
<td>'---------------------------------'</td>
<td></td>
</tr>
<tr>
<td>echo</td>
<td>${x}</td>
<td></td>
</tr>
<tr>
<td>open</td>
<td>/ekonto/control/szamla_letolt</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>link=Számlakeresés</td>
<td></td>
</tr>
<tr>
<td>select</td>
<td>name=regszolgid</td>
<td>label=</td>
</tr>
<tr>
<td>select</td>
<td>name=regszolgid</td>
<td>label=díjbeszedő (LOGIN_XXXXXXX)</td>
</tr>
<tr>
<td>click</td>
<td>css=option.47338196</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>id=button_gen_N1012B</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//table[@id='listframetable_N1012F_scroll']/tbody/tr[${x}]/td[2]/a/div</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>link=Letöltés</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>css=div.xt_link_cell__download</td>
<td></td>
</tr>
<tr>
<td>storeEval</td>
<td>storedVars['x']=${x}+1</td>
<td></td>
</tr>
<tr>
<td>gotoIf</td>
<td>${x}<555</td>
<td>kezdet</td>
</tr>
<!---->
</tbody></table>
</body>
</html>


elmut_kivalasztja_es_mindet_letolti.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="https://www.dijnet.hu/" />
<title>fogaz_kivalaszt_es_egyet_letolt</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">elmut_kivalasztja_es_mindet_letolti</td></tr>
</thead><tbody>
<tr>
<td>store</td>
<td>1</td>
<td>x</td>
</tr>
<tr>
<td>label</td>
<td>kezdet</td>
<td></td>
</tr>
<tr>
<td>echo</td>
<td>'---------------------------------'</td>
<td></td>
</tr>
<tr>
<td>echo</td>
<td>${x}</td>
<td></td>
</tr>
<tr>
<td>open</td>
<td>/ekonto/control/szamla_letolt</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>link=Számlakeresés</td>
<td></td>
</tr>
<tr>
<td>select</td>
<td>name=regszolgid</td>
<td>label=</td>
</tr>
<tr>
<td>select</td>
<td>name=regszolgid</td>
<td>label=elmű (LOGIN_XXXXXXX)</td>
</tr>
<tr>
<td>click</td>
<td>css=option.47338196</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>id=button_gen_N1012B</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//table[@id='listframetable_N1012F_scroll']/tbody/tr[${x}]/td[2]/a/div</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>link=Letöltés</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>css=div.xt_link_cell__download</td>
<td></td>
</tr>
<tr>
<td>storeEval</td>
<td>storedVars['x']=${x}+1</td>
<td></td>
</tr>
<tr>
<td>gotoIf</td>
<td>${x}<555</td>
<td>kezdet</td>
</tr>
<!---->
</tbody></table>
</body>
</html>


fogazt_kivalasztja_es_mindet_letolti.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="https://www.dijnet.hu/" />
<title>fogaz_kivalaszt_es_egyet_letolt</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">fogaz_kivalasztja_es_mindet_letolti</td></tr>
</thead><tbody>
<tr>
<td>store</td>
<td>1</td>
<td>x</td>
</tr>
<tr>
<td>label</td>
<td>kezdet</td>
<td></td>
</tr>
<tr>
<td>echo</td>
<td>'---------------------------------'</td>
<td></td>
</tr>
<tr>
<td>echo</td>
<td>${x}</td>
<td></td>
</tr>
<tr>
<td>open</td>
<td>/ekonto/control/szamla_letolt</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>link=Számlakeresés</td>
<td></td>
</tr>
<tr>
<td>select</td>
<td>name=regszolgid</td>
<td>label=</td>
</tr>
<tr>
<td>select</td>
<td>name=regszolgid</td>
<td>label=főgáz (LOGIN_XXXXXXX)</td>
</tr>
<tr>
<td>click</td>
<td>css=option.47338196</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>id=button_gen_N1012B</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//table[@id='listframetable_N1012F_scroll']/tbody/tr[${x}]/td[2]/a/div</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>link=Letöltés</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>css=div.xt_link_cell__download</td>
<td></td>
</tr>
<tr>
<td>storeEval</td>
<td>storedVars['x']=${x}+1</td>
<td></td>
</tr>
<tr>
<td>gotoIf</td>
<td>${x}<555</td>
<td>kezdet</td>
</tr>
<!---->
</tbody></table>
</body>
</html>


UPCt_kivalasztja_es_mindet_letolti.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="https://www.dijnet.hu/" />
<title>fogaz_kivalaszt_es_egyet_letolt</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">UPCt_kivalasztja_es_mindet_letolti</td></tr>
</thead><tbody>
<tr>
<td>store</td>
<td>1</td>
<td>x</td>
</tr>
<tr>
<td>label</td>
<td>kezdet</td>
<td></td>
</tr>
<tr>
<td>echo</td>
<td>'---------------------------------'</td>
<td></td>
</tr>
<tr>
<td>echo</td>
<td>${x}</td>
<td></td>
</tr>
<tr>
<td>open</td>
<td>/ekonto/control/szamla_letolt</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>link=Számlakeresés</td>
<td></td>
</tr>
<tr>
<td>select</td>
<td>name=regszolgid</td>
<td>label=</td>
</tr>
<tr>
<td>select</td>
<td>name=regszolgid</td>
<td>label=UPC (LOGIN_XXXXXXX)</td>
</tr>
<tr>
<td>click</td>
<td>css=option.47338196</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>id=button_gen_N1012B</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//table[@id='listframetable_N1012F_scroll']/tbody/tr[${x}]/td[2]/a/div</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>link=Letöltés</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>css=div.xt_link_cell__download</td>
<td></td>
</tr>
<tr>
<td>storeEval</td>
<td>storedVars['x']=${x}+1</td>
<td></td>
</tr>
<tr>
<td>gotoIf</td>
<td>${x}<555</td>
<td>kezdet</td>
</tr>
<!---->
</tbody></table>
</body>
</html>

Köszi, én kicsit átalakitottam, hogy ne töltse újra mindig a listát és ne kelljen a scriptbe beleirni az azonositókat. (nekem csak upc van benne, igy csak azzal próbáltam)
Bemész kézzel a számlakeresésbe, kiválasztod az azonositót (leszűröd akár dátumra) keresésgomb, hogy bejöjjön a lista és utána inditod a scriptet:

http://pastebin.com/KAESSePK

Még az xml letöltést is bele lehetne rakni...

A pause(1000) nekem kellett a számlaletöltés click után, különben néha kiakadt.

(ja a selenium mellé nekem ezt a plugint is fel kellett tegyem: https://addons.mozilla.org/hu/firefox/addon/flow-control/ )

Köszönöm a tanácsot! Igen, gondoltam erre, de a firefox valami sqlite DB-ben tárolja a cookie-kat, ha jól láttam és onnan kiszedni macera lett volna.

plusz a wget-tel szenvedvem egy kicsit, nem biztos, hogy meg lehet oldani a javascript miatt. Seleniummal egyszerű volt megoldani a dolgot.

Köszi a hozzájárulást mindenkinek, hatalmas segítség volt, pedig nem értek ám a webfejlesztéshez... :)

100-at akartam írni, de egy 0 lemaradt. Mondjuk nem olvastam el, hogy ennyi pénzért garantálják-e, hogy meg is marad minden számla..
Nem tárhely szolgáltatás. Általánosságban elmondható, hogy szolgáltatásnál van egy fix költség, valószínűleg nem a felhasznált MiB-ek befolyásolják leginkább.

Software is like sex, it's better with a penguin. :D (r)(tm)(c) آكوش

köszi, ez nagyon hasznos!
tipp: A password argumentum lehetne opció, és ha nincs akkor 'read' kérné be.

bugreport: "Csat. M&ucirc;v. Zrt." :)

szerk
most nézem a kódot. ezen lehet egyszerűsíteni valami ilyesmit:
s/á/a/g; s/Á/A/g
s/é/e/g; s/É/E/g
s/í/i/g; s/Í/I/g
s/û\|ú\|ü/u/g; s/Û\|Ú\|Ü/U/g
s/õ\|ó\|ö/o/g; s/Õ\|Ó\|Ö/O/g

&([a-zA-Z])[a-zA-Z]+;
Az első részmintára cseréled.

szerk2
ERROR: exit code not zero of command: INVOICE_COUNT=$(echo "${INVOICES}" | wc -w)

Erről felrémlett az a kódrészlet, amikor valaki annyira, de annyira ügyes volt, hogy str_replace-kkel gányolt át egy UCS-2-s szöveget UTF-8-ra, aztán csodálkozott, hogy mindig jött "valami idióta hangjegy karakter", ahelyett, hogy használta volna az iconv-ot.

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

Nálam is, már keresem az okát. Az biztos, hogy nem az echo-ba hal bele a script, hanem később.

szerk
grep -q 'href="szamla_letolt"' lép ki 1-es hibakóddal (nincs match). Viszont ha lementem a kimenetet, azt megnyitom editorban és úgy keresem a keresett szöveget, akkor ott meg van találat.

szerk2
a for ciklus első sorát kell módosítani így:
dijnet "control/${INVOICE}" | iconv -f iso8859-2 -t utf-8 | grep 'href="szamla_letolt"' || die

Az a gond, hogy a kérdéses sorban van egy ő betű, ami megzavarja a grep-et. Hogy a többi szolgáltatónál miért nincs az jó kérdés.
Env: osx 10.12.2
grep (BSD grep) 2.5.1-FreeBSD

Nálam is elhasalt, de legalább megtaláltam, hogy melyik számlánál.
A "Telekom mobil" szolgáltató olyan során, ahol a rendes (16 karakter, csak szám) számlaszám helyett a "Részletfizetés 2016.01" szöveg van a Számlaszám oszlopban. Lehet, hogy ez borítja meg?
Amúgy összeszámolta, hogy 44 számla van és 16-ot hiba nélkül le is töltött. A 17.-nél, ami a "Részletfizetés", annál szállt el.

Szerk1:
Annyit találtam még, hogy más a href szerkezete.
Normál számlánál ez:
href="szamla_select?vfw_coll=szamla_list&vfw_coll_index=0&vfw_rowid=15&vfw_colid=szamlaszam|egyenleginfo_0"
Részletfizetésnél meg ez:
href="/ekonto/control/szamla_select?vfw_coll=szamla_list&vfw_coll_index=0&vfw_rowid=16&vfw_colid=fizhatdat|R"

Mikor a 81. sorban a for-ciklusban a "control/" után fűzzük a href-et, akkor már invalid URL lesz:
"control//ekonto/control/szamla_select..." és kampec.
A HREF-ből ki kellene pucolni a felesleges "/ekonto/control/" string-et feldolgozás előtt, nem?

Szerk2: Megoldás!
A 78. sor végére betettem még egy 'sed' hívást, ami kiszedi.
...| sed 's/href="\([^"]*\)"/\1 /g;s/\&/\&/g' | sed 's/\/ekonto\/control\///g')
Ezek után hiba nélkül lefutott minden szolgáltató minden számlájára NÁLAM!

nekem nem volt xmllint telepítve (tudom olvassak, emlékszem 27-én néztem, hogy biztos nem lesz ilyenem, de most fogtam bemásoltam futtattam, nem olvastam), ha már van if which pv, akkor ugyanez wget, xmllintre is mehet :).
külső parancsokat én változóba szoktam tenni ráadásul abszolút elérési úttal, mert evil népek odatesznek neked egy wgetet.


++ wget --quiet --output-document=- --load-cookies /tmp/tmp.S9iWNk9LXe --save-cookies /tmp/tmp.S9iWNk9LXe --keep-session-cookies --post-data '' https://www.dijnet.hu/ekonto/control/szamla_search
++ xpath '//select[@name="szlaszolgid"]/option[string-length(@value)!=0]'
++ xmllint --html --xpath '//select[@name="szlaszolgid"]/option[string-length(@value)!=0]' -
+ PROVIDERS=
++ PREV_COMMAND='PROVIDERS=$(dijnet "control/szamla_search" | xpath '\''//select[@name="szlaszolgid"]/option[string-length(@value)!=0]'\'')'
++ THIS_COMMAND='[ -n "${PROVIDERS}" ]'
+ '[' -n '' ']'
++ PREV_COMMAND='[ -n "${PROVIDERS}" ]'
++ THIS_COMMAND='die "not able to detect service providers"'
+ die 'not able to detect service providers'
+ '[' -z 'not able to detect service providers' ']'
+ echo 'ERROR: not able to detect service providers'
ERROR: not able to detect service providers

pl. 12+:
WGET=/usr/bin/wget
XMLLINT=/usr/bin/xmllint

-32  xmllint --html --xpath "$1" - 2>/dev/null
+32  ${XMLLINT} --html --xpath "$1" - 2>/dev/null

-38  wget \
+38  ${WGET} \

más, a:


    INVOICE_DOWNLOAD=$(dijnet "control/szamla_letolt")
    INVOICE_NUMBER=$(echo "${INVOICE_DOWNLOAD}" | xpath '//label[@class="title_next_s"]/text()' | sed 's/\//_/g;s/ //g')
    TARGET_FOLDER=$(echo "${PROVIDER}/${INVOICE_NUMBER}" | sed 's/ \+/_/g')

Számlaszám-Kiállítás dátuma könyvtárat készít. Hogyan lehetne ez dátum-számlaszám?

Korábban nem tudom hogy volt, de most a "title_next_s" a számlaszámot és a Fizetési határidő-t tartalmazza egyben, vagyis a "Fizetendő számlák >>" utáni részt az oldal felső sorából.

A Kiállítás dátuma a <label class="">Kiállítás dátuma:</label> utáni első <div class="xt_field">2020.01.06</div> class-ból szedhető ki. Ehhez én most hülye vagyok, de nekem is jobban tetszene a "Számlaszám-Kiállítás" dátuma könyvtárnév. Ehhez még a számlaszámot is külön ki kellene szedni a "Számlaszám:" label után...

Valaki esetleg? :-)

Ha nem is a legszebb megoldással, de működik!

A 92-93 sorokat cseréltem le 3 módosított sorra:

#    INVOICE_NUMBER=$(echo "${INVOICE_DOWNLOAD}" | xpath '//label[@class="title_next_s"]/text()' | sed 's/\//_/g;s/ //g')
#    TARGET_FOLDER=$(echo "${UTF8_PROVIDER}/${INVOICE_NUMBER}" | sed 's/ \+/_/g;s/\.\//\//g')
    INVOICE_DATE=$(echo "${INVOICE_DOWNLOAD}" | xpath '//div[@id="tab_szamla_letolt"]/table/tr[1]/td/div/table/tr[3]/td[2]/div/text()' | sed 's/[^0-9]*//g')
    INVOICE_NUMBER=$(echo "${INVOICE_DOWNLOAD}" | xpath '//div[@id="tab_szamla_letolt"]/table/tr[1]/td/div/table/tr[3]/td[4]/div/text()' | sed 's/\//_/g;s/ //g')
    TARGET_FOLDER=$(echo "${UTF8_PROVIDER}/${INVOICE_DATE}_${INVOICE_NUMBER}" | sed 's/ \+/_/g;s/\.\//\//g')

A Dátumot és a Számlaszámot külön szedem ki és a mappa nevét ezekből fűzöm össze.

Ellenőrizzétek légyszi és ha máshol is ok, akkor mehet a kódba @woland ;-)

Köszi!

Ez a díjnet több szempontból szánalmas oldal.

Sok esetben (nem mindig) nem lehet url-ről vagy új ablakban nyitni dolgokat. Ha a számlák listájánál pl megnyitnál többet egymás után új ablakban, akkor ugyanazt az egyet mutatja, és az első kivételével mindegyiknél ott a figyelmeztetés: "Kérjük csak az oldalon található gombokat és hivatkozásokat használja!"

Kedves fejlesztők, talán tessék megtanulni hogy működik egy böngésző, figyelembe venni az urleket, a vissza gombot, és az új lapfülön megnyitás lehetőségét...

Hali!
Nekem ma a második számla betöltésekor hasal el.
Azt nem tudtam megállapítani, hogy a számla-listára visszalépéssel van gondja vagy a második számla-oldal betöltésével.
Valaki tesztelte mostanában? Október után?
Köszi!

Nekem sem igazán működik vagy én nem tudom használni... A bejelentkezésen sem jutok túl.
Valaki tudna írni pár sort hogyan kell használni...
THX

Nálam működik egy kis módosítás kellett hozzá. Az egyik gond az volt, hogy a szar karakter kódolás miatt a grep nem találta meg hogy a belépés sikeres volt-e vagy sem, a másik gond pedig az volt, hogy megváltozott az a html kód amit sikeres belépés esetén kiírt.

A login rész (nálam 57. sortól) most így néz ki:


printf "login... "
dijnet "login/login_check_password" "vfw_form=login_check_password&username=${USER}&password=${PASS}" \
| iconv -f ISO-8859-2 | grep -q "Bejelentkezési név: <strong>${USER}" || die "login failed"
echo OK

és ezzel működik is (macOS-en használom).
Ami változott: lefut egy ICONV ami 8859-2-ből az rendszer karakterkészletére fordítja, illetve a "<strong>${USER}" keresi a sikeres belépés feltételeként (azthiszem ott </em>${USER}) volt.

nálam ez van:

login... OK
query service providers... ERROR: not able to detect service providers
Terminated

pedig van 2 megszűnt és 2 aktív providerem is :( how to debug?

Ide írom, hogy meglegyen, mert nekem kezdőnek gondot okozott:

Ha a script-et sh-val futtatom (sh ./dijnet-dump.sh) akkor nem találja meg sem az xmllint, sem a perl hívásokat. Gondolm a PATH kezeléssel van gondja.

A fenti dependeny hibát is ez okozta nálam és a "query service providers..." rész is ezért szállt el.

Ha bash-ból hívom, akkor megtalálja az útvonalakat és hiba nélkül lefut az egész!

Amikor csak ./dijnet-dump.sh formában indítjuk, akkor mitől függ, hogy melyik shell-ben futtatja? Egyszerűen ami a "$ echo $SHELL"-ben ki van választva?

"Amikor csak ./dijnet-dump.sh formában indítjuk, akkor mitől függ, hogy melyik shell-ben futtatja? Egyszerűen ami a "$ echo $SHELL"-ben ki van választva?"

Hint: shebang. Jelen esetben tehát a /bin/bash hívódik meg a script futtatására.

Esetleg Digi számlákhoz valaki nem akar csinálni ilyet ? :)

Ehhez, meg pár más közüzemi céghez írok api klienst, amivel le tudom tölteni a számlát, illetve tudok óraállást diktálni.

Jelenleg elvan törve a letöltő, mert módosítottak valamit az oldalon, reményeim szerint a héten megjavítom.

https://github.com/ProZsolt/dijnet

...ööö, nem akarom széttrollkodni a dolgot, de egyébként miért szoktátok lementeni ezeket a számlákat? Mi a célja?

Ó, hogy a hatalmas Kublaj kán üssön rajtad, és a házad népén!

Voltaképpen anyámtól tanultam. Mindig elrakta a régi számlákat, 10+ évre visszamenőleg. Nem tudom, valaha is szüksége volt-e bármelyikre is.
De minthogy ez nem papír, hanem e-számla, így elfér. Ha papír lenne, nem hiszem, hogy egy évnél régebbit őrizgetnék, de így meg elvan a gépen. 
"Hátha egyszer szükség lesz rá"

http://www.micros~1
Rekurzió: lásd rekurzió.

Nekem épp most azért jött jól, mert fél éve hőszigetelték a (100 lakásos) házunkat, a távfűtés számlán pedig rajta van a teljes ház hőfelhasználása. Mivel le volt töltve a számla, könnyen vissza tudtam nézni, hogy az előző pár évhez képest mennyivel volt kevesebb a hőfelhasználás januárban. (Ez az adat sokkal többet elmond az energetikai változásról, mintha csak a saját lakásom fűtés költségét nézném.)

De érdekes volt visszanézni az elektromos fogyasztás változását hűtőszekrény csere valamint LED-re váltás után is. Ez utóbbiakhoz persze elég lett volna, ha van havonta vezetett mérőállásom, de a ház hőfelhasználását biztos eszembe nem jutott volna havonta írogatni.

Erre elég egy jó PFM alkalmazás, amibe persze be kell pakolni az adatokat. Sajnos a szép emlékű Csekkoló megszüntetésre került (2015-ben indult, Posta-Díjnet közös "gyermek" volt, szerintem kifejezetten jól kitalált és összerakott rendszerként), pedig az pont erre nagyon jó megoldást nyújtott - igaz, a "rezsicsökkentés"-t, mint olyat valahogy nem sikerült látnom a számokban...

Ez mondjuk igaz, bár esetemben kicsit túllövés lenne a célon. A megőrzött számláknak köszönhetően ki tudtam következtetni pár érdekes információt, ami a későbbiekben egy támpont lehet hasonló döntéseknél, de ennél több energiát beletenni nem látom értelmét.

Nem ebbe a topikba tartozik, de akkor már, ezek a következtetések: panelház 16 cm hőszigetelés után 30%-al csökkent a hőfelhasználás, ami sokkal kevesebb, mint amire számítottam volna. Nem közismert, de ezek a panelek úgy épültek, hogy a homlokzati panel elemek tartalmaznak egy 8 centis EPS hőszigetelést, ami ugyan nem hőhíd mentes, de – most hogy rákerült a 16 cm homlokzati, látszik igazán – meglepően sokat szigetel. A hűtőszekrény csere durván havi 25 kW-ot hozott, ez garantáltan megtérülős kategória. A világítás csere mérhetetlen ilyen módon, a havi számlán sokkal inkább meglátszik, ha párral többet vagy kevesebbet megy a mosógép vagy a sütő, szóval a LED-re váltás inkább a lelkemnek megnyugtató.

...jó, de egyrészt a díjnet is őrzi, másrészt meg ha utalással csinálja az ember, akkor a számlakivonaton is ott van a megfizetés ténye (másra nem nagyon lehet szükség). Tehát ha évente egyszer lementi az ember az egy szem xls/pdf/csv fájlt a netbankról, akkor ott van minden. Kereshető, színes, szagos. Úgy nem kell egyesével baszakodni / programot írni a díjnetes számlák beszerzésére.

Ó, hogy a hatalmas Kublaj kán üssön rajtad, és a házad népén!

Abból is látszik a képzavar, hogy a "megfizetés ténye" nincs mindig a számlán. ;)

A számlára szükség lehet, ha

  • elszámolod (Könyvelésnél a számlát tudod elszámolni és nem a befizetés tényét. ;))
  • tudni szeretnéd, hogy mennyit kellett volna fizetned (hátha téves összeget utaltál)
  • részletesen tudni akarod az egyes szolgáltatásokra fordított összeget (egy számla többféle szolgáltatás díját is tartalmazhatja)
  • és mint pénzügyi tranzakcióhoz tartozó dokumentum, illik megőrizni (bár kisebb az elévülési idő, mint a banknál)

A szolgáltatókra érvényes elévülési időn belül a Díjnet tárolja a számlákat, amelyek néhány kattintással letölthetők. Ha elszámolod, akkor évente úgy is letöltöd és csatolod a könyveléshez. Ha csak gyűjtöd, akkor is megteheted. Az utóbbi helyett bármikor online megnézheted és letöltheted, ha szükség van rá. A szolgáltatók évente kötelesek elszámolni még akkor is, ha pl. 3 havi számlát bocsátanak ki egyszerre.

Nem online számlabemutatásnál van még egy eset: Ha a számla hamis. Na, ez érdekes jogi helyzetet teremt! Ha befizetted a hamis számlát és ezt igazolni tudod, akkor győztél. ;)

Ok, a nagyja akkor világos, kivéve ezt:

"Abból is látszik a képzavar, hogy a "megfizetés ténye" nincs mindig a számlán. ;)"

Ha ott az én számlaszámom, amiről indult a pénz, valamint a célállomás, meg az elutalt összeg plusz a közleményben az azonosító, akkor szerintem ez csak azt jelentheti, hogy ki lett fizetve a számla. ;) Vagy nem?

Ó, hogy a hatalmas Kublaj kán üssön rajtad, és a házad népén!

Nem.

Olvasd végig figyelmesen a felsorolást!

Fizethetsz hibás összeget is, pl. 10000 helyett csak 1000 megy az utalással.

Az azonosító megint egy buktató lehet. Van fix díjas szolgáltatás, ahol lehet állandó azonosító. A többinél meg ügyfelenként és számlánként más az azonosító. Az utóbbit számla nélkül ki sem tudod találni.

A pontos összeg még fix összegnél sem biztos. Hibázhat a szolgáltató rendszere is, "előkerülhet" valamilyen "rejtett" tartozás is. ;)

Rokon 90-es években hitelből házat épített. Idővel kifizette, a banki jelzálog lekerült róla, minden földhivatali bejegyzés rendeződött. Minden csekket eltett. Közel 20 évvel később az OTP-nek az EOS faktora elkezdett ugatni a magas lóról meg fenyegetőzni, hogy kb fél milliós tartozás van még ebből a hitelből és rendezzük. Először ráhozta a frászt a rokonra. Aztán kapcsolt, hogy megvannak a csekkek. Előkereste és elküldte őket az anyjukba. Azóta csendben vannak, de egy elnézést, adminisztrációs hiba/hülyék voltunk semmi nem jött vissza. Azért okozott neki pár gyomorgörcsös hetet. Papírország, basszus, papírország ez még mindig.
Ha papírral nem tudod igazolni az igazadat, átvernek. Aztán ha igazoltad, jön a jaj a számítógépben rosszul volt c. duma. Jártam így a Fibernettel is. Tróger banda volt az is.
Én a papírt nem teszem el, mert 2x akkora lakóterület kellene a végén, de ledarálás előtt lefényképezem és mindet archiválom.

5 év alatt elévült a követelés, igazából erre is hivatkozhatott volna gyomorideg helyett.

Nálam ilyen próbálkozás talán egy vagy kettő volt, de soha nem kellett még csekkeket keresgélnem, küldözgetnem. Eddig elég volt a banki kivonat másolata (pdf), vagy csak szimplán emailben jelezni az utalások pontos dátumát, hogy hol keressék a pénzület. (Jó, persze húsz évvel ezelőtt ez még más lehetett.)

A legdurvább a helyi önkormányzat teljesen inkompetens adóügyi előadója, akinek nagyon nehezére esett felfognia, hogy egy iparűzési adó befizetésénél neki elég a befizetőazonosítót és az összeget néznie, teljesen lényegtelen BÁRMILYEN szempontból, hogy a küldő számlaszám kinek a nevén van. Konkrétan: a feleségem nevén van a számla, közösen használjuk, és az előadó hölgy nem tudta hova lekönyvelni a beérkező összeget, mert nem tudta kilogikázni, hogy a  szmlatulajdonos "Mászógépné" az nyilván az adóalany "Mászógép" hites felesége. Ráadásul, ismétlem, ha azt "XY Jani" számlájáról fizetik be, az adózási szempontból továbbra is mindegy. Ők is mindenféle papírokat akartak, de végül elnézést kértek, amikor valaki elmagyarázta neki, hogy mit basz el.

Nekem pont az a véleményem, hogy ez a fenenagy digitalizáció igenis egyértelműbbé tette az efféle ügyintézéseket, mindenféle papírfecnik keresgélése nélkül is. :)

Ó, hogy a hatalmas Kublaj kán üssön rajtad, és a házad népén!

1- nagy köszönet a munkádért

2- bug report:
- Ha egy számlaszolgáltató (pl DBH Zrt) több szolgáltató számlázását is ellátja (pl FV, NCSM, NKHV) akkor háromszorosan tölti le a számlákat
- cygwin install esetén a szintaxisból hiányzik a vessző: setup-x86_64.exe -qP wget,xxd,libxml2,pv

"The only valid measurement of code quality: WTFs/min"

Az INVOICE_PROVIDER_ALIAS-nak szerintem INVOICE_ISSUER_ALIAS-nak kellene lennie...mert ha jól értelmezem ez az érték nem más, mint a ekonto/control/regszolg_list-en megadott "megjelenési név" ami a INVOICE_ISSUER_ID-nak a user defined/readable formája.

Tippre emiatt pakolja bele a INVOICE_PROVIDER könyvtárba az összes, azonos ISSUER-hez tartozó számlát.
 

Ja, és a https://www.dijnet.hu/ekonto/control/szamla_search_submit oldalon a Díjnet is elbökte mert a "Számlakibocsátói azonosító" oszlop, valójában a user által megadott  INVOICE_PROVIDERISSUER_ALIAS...nem pedig a fejléc által sugallt INVOICE_ISSUER_ID.

Ha jobban érteném mit csinál script, javítást is küldtem volna, de egyelőre ennyire tellett tőlem :/

Hátha valaki előrébb jut vele.

"The only valid measurement of code quality: WTFs/min"

Valamit megint baszakodott a dijnet, úgy nézem :(
 

login...   HTTP/1.1 406 Not Acceptable
  Date: Thu, 11 Aug 2022 08:47:21 GMT
  Content-Type: text/html
  Content-Length: 156
  Connection: close
  Server: HTTP-Server
  X-Frame-Options: SAMEORIGIN
  X-XSS-Protection: 1; mode=block
  X-Content-Type-Options: nosniff
  Referrer-Policy: strict-origin
  Strict-Transport-Security: max-age=31536000
  Front-End-Https: on
  Set-Cookie: HAPROXY_SESSION=as41|YvTCH; path=/; HttpOnly; Secure

ERROR: login failed ()

http://www.micros~1
Rekurzió: lásd rekurzió.

$ curl -qs 'https://www.dijnet.hu/ekonto/login/login_check_ajax'   -H 'Accept: application/json, text/javascript, */*; q=0.01'   -H 'Accept-Language: en-US,en;q=0.9'   -H 'Cache-Control: no-cache'   -H 'Connection: keep-alive'   -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8'   -H 'Cookie: _gcl_au=1.1.1673352902.1660242445; lang=hu; _ga=GA1.2.620560328.1660242445; _gid=GA1.2.761682434.1660242445; _omappvp=Mjd3u9Kuq3NuCECyhA8QqkGYpjrG9CsLPZArPX9CJuiKXFEecYMLnL76UJm9ubD2Kk2a8bxKn0kdeYT5RnyjemQSpdFBbhPB; _omappvs=1660242445351; HAPROXY_SESSION=as51|YvVKE'   -H 'Origin: https://www.dijnet.hu'   -H 'Pragma: no-cache'   -H 'Referer: https://www.dijnet.hu/'   -H 'Sec-Fetch-Dest: empty'   -H 'Sec-Fetch-Mode: cors'   -H 'Sec-Fetch-Site: same-origin'   -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'   -H 'X-Requested-With: XMLHttpRequest'   -H 'sec-ch-ua: "Chromium";v="104", " Not A;Brand";v="99", "Google Chrome";v="104"'   -H 'sec-ch-ua-mobile: ?0'   -H 'sec-ch-ua-platform: "Windows"'   --data-raw 'username=f&password=g'   --compressed | jq '.'
{
  "success": false,
  "error": "Sikertelen bejelentkez�s. Ellen�rizze adatait �s pr�b�lja �jra!"
}

ez talan segit:

megáll a PROVIDER_JSON olvasásásnál?

+ IFS='
'
+ INVOICES=($(sed -En "s/.*clickSzamlaGTM\('szamla_select', ([0-9]+).*/\1/p" <<<"${INVOICES_PAGE}"))
++ sed -En 's/.*clickSzamlaGTM\('\''szamla_select'\'', ([0-9]+).*/\1/p'
+ progress
++ sed 's/ ()$//'
+ local 'PROVIDER_NAME=MVM Next - Foldgaz (xxxx)'
+ type pv
+ awk -v 'name=MVM Next - Foldgaz (xxxx)' -v total=0 '{printf "\033[2K\rdownload \"%s\", total: %d, current: %d", name, total, $1; fflush(stdout)}
         END {if (NR>0) printf "\n"}'
+ read -r PROVIDER_JSON
+ rm /home/user/.tmp/tmp.PESGDcRXIP

Ebbe a ciklusba nem lép be. Pár perces debuggolás után szerintem ez a patch jó lesz:

diff --git a/dijnet-dump.sh b/dijnet-dump.sh
index eb50322..16c90cc 100755
--- a/dijnet-dump.sh
+++ b/dijnet-dump.sh
@@ -111,7 +111,7 @@ unaccent <<<"${PROVIDERS_PAGE}" | sed -En 's/.*var ropts = \[(.*)\];.*/\1/p' | s
   INVOICES_PAGE=$(dijnet "ekonto/control/szamla_search_submit" "vfw_form=szamla_search_submit" \
     "&vfw_coll=szamla_search_params&regszolgid=${PROVIDER["regszolgid"]}" \
     "&datumtol=$(sed 's/\./-/g' <<<"${FROM_DATE}")&datumig=$(sed 's/\./-/g' <<<"${TILL_DATE}")")
-  IFS=$'\n' INVOICES=($(sed -En "s/.*clickSzamlaGTM\('szamla_select', ([0-9]+).*/\1/p" <<<"${INVOICES_PAGE}"))
+  IFS=$'\n' INVOICES=($(sed -En "s/.*clickSzamla\('szamla_select', ([0-9]+).*/\1/p" <<<"${INVOICES_PAGE}"))
 
   for INVOICE_INDEX in ${INVOICES[@]}; do
     INVOICE_PAGE=$(dijnet "ekonto/control/szamla_select" "vfw_coll=szamla_list&vfw_rowid=${INVOICE_INDEX}")

Ha jól látom, a clickSzamlaGTM függvény neve változott clickSzamla-ra.

Semmi gond, én meg bár pár napja/hete már láttam, hogy nem jönnek le a díjnet számlák nem volt kedvem utána menni mi a gond, vártam, hátha valaki megoldja. Hát megoldotta :) Nekem a github-os rész volt pár perc kipróbálással együtt :)

Köszi a javítást, be is engedtem.