fix(card): 修复psa搜卡验证问题

This commit is contained in:
xingc
2025-12-11 19:50:27 +08:00
parent c076431ec0
commit a5d9b8e28a

View File

@@ -22,6 +22,17 @@ from core.utils.helper import async_retry, decrypt_aes_cbc, generate_keyname
logger = logging.getLogger(__name__)
async def get_cf_clearance(platform: str) -> dict:
redis_conn = await get_cache()
async with redis_conn:
cache_session_str = await redis_conn.get(generate_keyname(f'session:{platform}'))
if isinstance(cache_session_str, str):
headers = ujson.decode(cache_session_str)
else:
headers = {}
return headers
class SiteApi:
def __init__(self):
self.user_agent = UserAgent(
@@ -99,9 +110,12 @@ class SiteApi:
headers = {
# 'X-Requested-With': 'XMLHttpRequest',
'Origin': 'https://www.psacard.com',
'Referer': f'https://www.psacard.com/cert/{cert_number}',
'Referer': f'https://www.psacard.com/cert/{cert_number}/psa',
}
r = await self.get(url, headers=headers, impersonate="chrome110")
cf_clearance_headers = await get_cf_clearance(platform='psa')
headers.update(cf_clearance_headers)
r = await self.get(url, headers=headers, use_abroad_proxy=True, use_random_ua=False, http_version=2, impersonate="chrome110")
return r
async def psa_images(self, cert_number: str | int, images_id: str | int):
@@ -130,14 +144,7 @@ class SiteApi:
async def cgc(self, cert_number: str | int):
"""CGC"""
url = f'https://www.cgccards.com/certlookup/{cert_number}/'
redis_conn = await get_cache()
async with redis_conn:
cache_session_str = await redis_conn.get(generate_keyname('session:cgc'))
if isinstance(cache_session_str, str):
headers = ujson.decode(cache_session_str)
else:
headers = {}
headers = await get_cf_clearance(platform='cgc')
return await self.get(url, headers=headers, use_random_ua=False, use_abroad_proxy=True)
async def gbtc(self, cert_number: str | int):
@@ -229,7 +236,7 @@ class CardScraper:
if html.xpath('//div[contains(@class, "wrapper")]//h1/text()').get() is not None:
return
info_elements = html.xpath('//div[@hidden and @id]/div[contains(@class, "py-3")]')
info_elements = html.xpath('//dl[@class="text-body1"]/div[contains(@class, "py-3")]')
info = dict()
for info_element in info_elements:
name = info_element.xpath('./dt[1]').xpath('string()').get() or info_element.xpath(
@@ -267,8 +274,8 @@ class CardScraper:
item['card_type'] = info.get('category')
# 卡片正、反图片(远程)
item['card_spare_picture'] = {
'front_picture': html.xpath('//div[contains(@class, "flex")]//span/noscript/img[@alt="left"]/@src').get(),
'reverse_picture': html.xpath('//div[contains(@class, "flex")]//span/noscript/img[@alt="right"]/@src').get()
'front_picture': html.xpath('//div[contains(@class, "flex")]//span//img[@alt="left"]/@src').get(),
'reverse_picture': html.xpath('//div[contains(@class, "flex")]//span//img[@alt="right"]/@src').get()
}
# 来源