|
@@ -23,9 +23,7 @@ class SpiderSession:
|
|
|
def __init__(self):
|
|
def __init__(self):
|
|
|
self.cookies_dir_path = "./cookies/"
|
|
self.cookies_dir_path = "./cookies/"
|
|
|
self.is_login = False
|
|
self.is_login = False
|
|
|
-
|
|
|
|
|
self.session = self.__init_session()
|
|
self.session = self.__init_session()
|
|
|
- self.load_cookies_from_local()
|
|
|
|
|
|
|
|
|
|
def __init_session(self):
|
|
def __init_session(self):
|
|
|
session = requests.session()
|
|
session = requests.session()
|
|
@@ -66,7 +64,7 @@ class SpiderSession:
|
|
|
if not os.path.exists(self.cookies_dir_path):
|
|
if not os.path.exists(self.cookies_dir_path):
|
|
|
return False
|
|
return False
|
|
|
for name in os.listdir(self.cookies_dir_path):
|
|
for name in os.listdir(self.cookies_dir_path):
|
|
|
- if name.endswith(self.cookies_dir_path):
|
|
|
|
|
|
|
+ if name.endswith(".cookies"):
|
|
|
cookies_file = '{}{}'.format(self.cookies_dir_path, name)
|
|
cookies_file = '{}{}'.format(self.cookies_dir_path, name)
|
|
|
break
|
|
break
|
|
|
if cookies_file == '':
|
|
if cookies_file == '':
|
|
@@ -110,8 +108,12 @@ class SpiderSession:
|
|
|
|
|
|
|
|
class JdSeckill(object):
|
|
class JdSeckill(object):
|
|
|
def __init__(self):
|
|
def __init__(self):
|
|
|
|
|
+ self.spider_session = SpiderSession()
|
|
|
|
|
+ self.spider_session.load_cookies_from_local()
|
|
|
|
|
+ self.session = self.spider_session.get_session()
|
|
|
|
|
+
|
|
|
# 初始化信息
|
|
# 初始化信息
|
|
|
- self.session = get_session()
|
|
|
|
|
|
|
+ # self.session = get_session()
|
|
|
self.sku_id = global_config.getRaw('config', 'sku_id')
|
|
self.sku_id = global_config.getRaw('config', 'sku_id')
|
|
|
self.seckill_num = 2
|
|
self.seckill_num = 2
|
|
|
self.seckill_init_info = dict()
|
|
self.seckill_init_info = dict()
|
|
@@ -123,8 +125,6 @@ class JdSeckill(object):
|
|
|
self.is_login = False
|
|
self.is_login = False
|
|
|
self.nick_name = None
|
|
self.nick_name = None
|
|
|
|
|
|
|
|
- self._load_cookies()
|
|
|
|
|
-
|
|
|
|
|
def reserve(self):
|
|
def reserve(self):
|
|
|
"""
|
|
"""
|
|
|
预约
|
|
预约
|
|
@@ -153,7 +153,6 @@ class JdSeckill(object):
|
|
|
"""
|
|
"""
|
|
|
预约
|
|
预约
|
|
|
"""
|
|
"""
|
|
|
- self._validate_cookies()
|
|
|
|
|
while True:
|
|
while True:
|
|
|
try:
|
|
try:
|
|
|
self.make_reserve()
|
|
self.make_reserve()
|
|
@@ -165,7 +164,6 @@ class JdSeckill(object):
|
|
|
"""
|
|
"""
|
|
|
抢购
|
|
抢购
|
|
|
"""
|
|
"""
|
|
|
- self._validate_cookies()
|
|
|
|
|
while True:
|
|
while True:
|
|
|
try:
|
|
try:
|
|
|
self.request_seckill_url()
|
|
self.request_seckill_url()
|
|
@@ -176,47 +174,6 @@ class JdSeckill(object):
|
|
|
logger.info('抢购发生异常,稍后继续执行!', e)
|
|
logger.info('抢购发生异常,稍后继续执行!', e)
|
|
|
self.wait_some_time()
|
|
self.wait_some_time()
|
|
|
|
|
|
|
|
- def _load_cookies(self):
|
|
|
|
|
- cookies_file = ''
|
|
|
|
|
- if os.path.exists('./cookies'):
|
|
|
|
|
- for name in os.listdir('./cookies'):
|
|
|
|
|
- if name.endswith('.cookies'):
|
|
|
|
|
- cookies_file = './cookies/{0}'.format(name)
|
|
|
|
|
- break
|
|
|
|
|
- if cookies_file == '':
|
|
|
|
|
- return
|
|
|
|
|
- with open(cookies_file, 'rb') as f:
|
|
|
|
|
- local_cookies = pickle.load(f)
|
|
|
|
|
- self.session.cookies.update(local_cookies)
|
|
|
|
|
- self.is_login = self._validate_cookies()
|
|
|
|
|
-
|
|
|
|
|
- def _save_cookies(self):
|
|
|
|
|
- cookies_file = './cookies/{0}.cookies'.format(self.nick_name)
|
|
|
|
|
- directory = os.path.dirname(cookies_file)
|
|
|
|
|
- if not os.path.exists(directory):
|
|
|
|
|
- os.makedirs(directory)
|
|
|
|
|
- with open(cookies_file, 'wb') as f:
|
|
|
|
|
- pickle.dump(self.session.cookies, f)
|
|
|
|
|
-
|
|
|
|
|
- def _validate_cookies(self):
|
|
|
|
|
- """验证cookies是否有效(是否登陆)
|
|
|
|
|
- 通过访问用户订单列表页进行判断:若未登录,将会重定向到登陆页面。
|
|
|
|
|
- :return: cookies是否有效 True/False
|
|
|
|
|
- """
|
|
|
|
|
- url = 'https://order.jd.com/center/list.action'
|
|
|
|
|
- payload = {
|
|
|
|
|
- 'rid': str(int(time.time() * 1000)),
|
|
|
|
|
- }
|
|
|
|
|
- try:
|
|
|
|
|
- resp = self.session.get(url=url, params=payload, allow_redirects=False)
|
|
|
|
|
- if resp.status_code == requests.codes.OK:
|
|
|
|
|
- return True
|
|
|
|
|
- except Exception as e:
|
|
|
|
|
- logger.error(e)
|
|
|
|
|
-
|
|
|
|
|
- self.session = get_session()
|
|
|
|
|
- return False
|
|
|
|
|
-
|
|
|
|
|
def _get_login_page(self):
|
|
def _get_login_page(self):
|
|
|
url = "https://passport.jd.com/new/login.aspx"
|
|
url = "https://passport.jd.com/new/login.aspx"
|
|
|
page = self.session.get(url, headers=self.headers)
|
|
page = self.session.get(url, headers=self.headers)
|
|
@@ -305,7 +262,7 @@ class JdSeckill(object):
|
|
|
"""二维码登陆
|
|
"""二维码登陆
|
|
|
:return:
|
|
:return:
|
|
|
"""
|
|
"""
|
|
|
- if self.is_login:
|
|
|
|
|
|
|
+ if self.spider_session.is_login:
|
|
|
logger.info('登录成功')
|
|
logger.info('登录成功')
|
|
|
return
|
|
return
|
|
|
|
|
|
|
@@ -331,9 +288,10 @@ class JdSeckill(object):
|
|
|
raise SKException('二维码信息校验失败')
|
|
raise SKException('二维码信息校验失败')
|
|
|
|
|
|
|
|
logger.info('二维码登录成功')
|
|
logger.info('二维码登录成功')
|
|
|
- self.is_login = True
|
|
|
|
|
|
|
+ # self.is_login = True
|
|
|
self.nick_name = self.get_username()
|
|
self.nick_name = self.get_username()
|
|
|
- self._save_cookies()
|
|
|
|
|
|
|
+ self.spider_session.update_login_status()
|
|
|
|
|
+ self.spider_session.save_cookies_to_local(self.nick_name)
|
|
|
|
|
|
|
|
def make_reserve(self):
|
|
def make_reserve(self):
|
|
|
"""商品预约"""
|
|
"""商品预约"""
|