Requests通过Session保持会话,获取数据

最近在爬一个网站,通过登录之后,获取信息。

遇见的问题:

        采取的selenium模拟登陆。因为有验证码的关系,直接用requests实现登陆不太方便,所以采用的selenium模拟登陆。

        登陆之后,使用selenium中的get_cookies获取的cookie 并不能直接拿回数据,和数据所在的请求接口中的cookie有区别。

        真实数据所在的cookie多了一个参数。

经过一番的js调试,想要模拟出set-cookie的过程,直接破解cookie来拿回数据。

一番调试之后,发现js的层级关系过于复杂,选择了放弃。

后来选择了Session保持会话的功能来获取数据。

通过抓包之后发现:

 数据所在请求接口之前,先访问了这样一个页面:

接着往上寻找,

发现这样一个页面请求:

对两个框中的url进行拼接。

是不是可以得到url?接着用session进行保持会话即可。

代码如下:

def session_keep(self):
    try:
        url = '***********'.format(
            time.time() * 1000)
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36',
            'Referer': '******************',
            'Cookie': 'AD_RS_COOKIE=20110970;SSO_LOGIN_TGC=dec7e66ddd77486da11751ddef4f6045;TGC=TGT-2767-h3FbVj7kFgPXMgRykbOiMRFjnXpQ0Ljn2Ik4vQsyYsSVVlTrii-hbdzswj;DZSWJ_TGC=58bdb8a5b8ce4ae89cba755114cba6ff;JSESSIONID=WetH1vXrPMx3uPhFoi4pikUaBneHN9Ph7-5_QH_fcnmUsM2EukQZ!-912544654'
        }
        res = self.s.get(url=url, timeout=10, headers=headers, verify=False).text
        nextUrl = "***************************" + \
                  re.findall('src="./static/js/common/vendor.js\?(.*?)"', res)[0]
        self.s.get(nextUrl, headers=headers, verify=False)
    except Exception as e:
        msg = traceback.format_exc()
        print(msg)
        return False, '建立保持会话失败'

猜你喜欢

转载自blog.csdn.net/qq_39138295/article/details/89491055