diff --git a/modules/groupama/browser.py b/modules/groupama/browser.py
index d227a66f231835baff5d7b62c3134d439c96afe2..b06b74fa58523a4d7c53adbcc233bab86c718e1b 100644
--- a/modules/groupama/browser.py
+++ b/modules/groupama/browser.py
@@ -17,13 +17,14 @@
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see .
+import re
from weboob.browser import LoginBrowser, URL, need_login
from weboob.exceptions import BrowserIncorrectPassword
from weboob.capabilities.bank import Account
from weboob.capabilities.base import empty
-from .pages import LoginPage, AccountsPage, TransactionsPage, AVAccountPage, AVHistoryPage, FormPage, IbanPage
+from .pages import LoginPage, AccountsPage, TransactionsPage, AVAccountPage, AVHistoryPage, FormPage, IbanPage, AvJPage
__all__ = ['GroupamaBrowser']
@@ -39,8 +40,10 @@ class GroupamaBrowser(LoginBrowser):
accounts = URL('/wps/myportal/TableauDeBord', AccountsPage)
transactions = URL('/wps/myportal/!ut', TransactionsPage)
av_account_form = URL('/wps/myportal/assurancevie/', FormPage)
- av_account = URL('https://secure-rivage.(ganassurances|ganpatrimoine|groupama).fr/contratVie.rivage.syntheseContratEparUc.gsi', AVAccountPage)
+ av_account = URL('https://secure-rivage.(ganassurances|ganpatrimoine|groupama).fr/contratVie.rivage.syntheseContratEparUc.gsi',
+ '/front/vie/epargne/contrat/(.*)', AVAccountPage)
av_history = URL('https://secure-rivage.(?P.*).fr/contratVie.rivage.mesOperations.gsi', AVHistoryPage)
+ av_secondary = URL('/api/ecli/vie/contrats/(?P.*)', AvJPage)
def __init__(self, *args, **kwargs):
super(GroupamaBrowser, self).__init__(*args, **kwargs)
@@ -68,6 +71,13 @@ def get_accounts_list(self, balance=True, need_iban=False):
if self.av_account_form.is_here():
self.page.av_account_form()
account.balance, account.currency = self.page.get_av_balance()
+ # New page where some AV are stored
+ elif "front/vie/" in account._link:
+ link = re.search('contrat\/(.+)-Groupama', account._link)
+ if link:
+ self.av_secondary.go(id_contrat=link.group(1))
+ account.balance, account.currency = self.page.get_av_balance()
+
self.accounts.stay_or_go()
if account.balance or not balance:
if account.type != Account.TYPE_LIFE_INSURANCE and need_iban:
diff --git a/modules/groupama/pages.py b/modules/groupama/pages.py
index fbf99ad762bf25138517d8e8f88f597a4bf93df0..b04b426bb90bd04e04951388bcd64f14cfa61b13 100644
--- a/modules/groupama/pages.py
+++ b/modules/groupama/pages.py
@@ -25,7 +25,7 @@
from decimal import Decimal
-from weboob.browser.pages import HTMLPage, pagination, LoggedPage, FormNotFound
+from weboob.browser.pages import HTMLPage, pagination, LoggedPage, FormNotFound, JsonPage
from weboob.browser.elements import method, TableElement, ItemElement
from weboob.browser.filters.standard import Env, CleanDecimal, CleanText, Date, Regexp, Eval
from weboob.browser.filters.html import Attr, Link, TableCell
@@ -33,6 +33,7 @@
from weboob.capabilities.bank import Account, Investment
from weboob.capabilities.base import NotAvailable
from weboob.tools.capabilities.bank.transactions import FrenchTransaction
+from weboob.browser.filters.json import Dict
class LoginPage(HTMLPage):
@@ -217,6 +218,13 @@ def condition(self):
obj_code_type = Investment.CODE_TYPE_ISIN
+class AvJPage(LoggedPage, JsonPage):
+ def get_av_balance(self):
+ balance = CleanDecimal(Dict('montant'))(self.doc)
+ currency = "EUR"
+ return balance, currency
+
+
class AVHistoryPage(LoggedPage, HTMLPage):
@method
class get_av_history(TableElement):