From e68e64065a2194608b15c73012f10e79511eeff3 Mon Sep 17 00:00:00 2001 From: yiekheng Date: Sat, 2 May 2026 17:55:12 +0800 Subject: [PATCH] refactor(scraper): make get_register_link and get_user_credit dump on failure --- app/cm_bot.py | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/app/cm_bot.py b/app/cm_bot.py index b512eba..45528e7 100644 --- a/app/cm_bot.py +++ b/app/cm_bot.py @@ -452,8 +452,21 @@ class CM_BOT: def get_register_link(self): response = self.session.get(f"{self.base_url}/cm/showQrCode") soup = BeautifulSoup(response.content, 'html.parser') - soup = soup.find('form', {'id': 'qrCodeForm'}) - return soup.find('a')['href'] + form = soup.find('form', {'id': 'qrCodeForm'}) + if form is None: + path = self._dump_html("register_link_form", response.content) + raise ScraperError( + f"register_link: form#qrCodeForm not found " + f"(response saved to {path})" + ) + anchor = form.find('a') + if anchor is None or 'href' not in anchor.attrs: + path = self._dump_html("register_link_anchor", response.content) + raise ScraperError( + f"register_link: inside form#qrCodeForm not found " + f"(response saved to {path})" + ) + return anchor['href'] def get_generate_username(self, max_username_index: int): max_username_index += 1 @@ -515,12 +528,10 @@ class CM_BOT: soup = BeautifulSoup(response.content, 'html.parser') try: return round(float(soup.find('table', {'class': 'generalContent'}).find(text=re.compile('Credit Available')).parent.parent.find_all('td')[2].text.replace(",","")), 2) - except: - print(f"Error getting credit.") - now = datetime.datetime.now().strftime('%Y%m%d_%H%M') - # with open(f'credit-{now}.html', 'wb') as f: - # f.write(response.content) - return 0 + except Exception as exc: + self._dump_html("get_user_credit", response.content) + print(f"Error getting credit: {exc}") + return 0 def get_transfer_token(self): response = self.session.get(f'{self.base_url}/cm/transfer')