js逆向爬虫实战之第三方平台之获取登录cookies

爬虫js逆向系列我会把做爬虫过程中 , 遇到的所有js逆向的问题分类展示出来 , 以现象 , 解决思路 , 以及代码实现 。 我觉得做技术分享 , 不仅仅是要记录问题 , 解决办法 , 更重要的是要提供解决问题的思路 。 怎么突破的 , 遇到这个问题怎么思考 , 尝试的方法有哪些 。 这样就可以有的放矢 。 希望对大家有用
爬虫认知在程序猿所有的方向中 , 爬虫是离money最近的一个方向 , 你的明白?而且爬虫可发展的方向很多 , 前可走大数据 , 人工智能 , 后可转后端,还有就是安全领域 。 而且爬虫做得好 , 要求的技术栈还是比较全面的 。 如果你对爬虫有兴趣 , 欢迎加V:13809090874 , 一起沟通交流
免责申明:此内容仅供学习交流使用 , 不用于商业用途 , 如果涉及侵权 , 联系作者删除
上面一篇我们说完了请求参数的破解 , 用我们模拟的请求链接+固定的cookies就可以通过代码的形式访问接口了 。 但有一个问题就是cookies是有失效期的 , 过一段时间 , cookies就不能用了 , 我们必须得去破解登录的问题 , 然后建立自己的cookies池 , 才能真正实现自动化抓取 。
1. 先人工登录 , 观察一下需要什么1.微信扫码登录
js逆向爬虫实战之第三方平台之获取登录cookies文章插图
2. 账号密码登录
js逆向爬虫实战之第三方平台之获取登录cookies文章插图
【js逆向爬虫实战之第三方平台之获取登录cookies】我们可以看到这里有三种登录方式:1.微信扫码登录 , 2.密码登录 , 3.短信登录 。 这其中难度系数 , 估计大家也都清楚 , 微信扫码登录和短信登录是很麻烦的 , 需要一些第三方服务 , 这个以后再讲 。 这个平台 , 可以用密码登录 , 最好不过了 。
js逆向爬虫实战之第三方平台之获取登录cookies文章插图
我们点击登录后需要拖动滑块 。 这个滑块 , 大家在看js的时候 , 如果细心一点 , 可以看到这个网站是调用阿里的滑块的服务的 。 以下我给出的也是阿里滑块的通用解决方案 。
阿里滑块解决–selenium屏蔽webdriver我们通过selenium去调用chrome的webdriver , 然后模拟拖动滑块 , 是拖不过去的 , 因为阿里会对你是不是用了webdriver进行检测的 。 废话不多说 , 上代码:
def init_chrome_options(self,):chrome_options = webdriver.ChromeOptions()# 设置浏览器初始 位置x,yWin64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"')path = './../chromedriver'driver = webdriver.Chrome(executable_path=path, options=chrome_options)driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})""",})return driver这是我常用的selenium配置 , 拿走不谢 。 加上这个配置 , 然后通过selenium去拖动滑块就可以 。 这个滑块直接滑到最右边就可以 。 没有路径 , 速度检测的 。
def login(self):c_list = []while 1:driver = self.init_chrome_options()try:url = ''driver.get(url)time.sleep(1)#获取登录元素 , 并输入账号密码driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div/div[2]/div/div[2]/div/div[1]').click()driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div/div[2]/div/div[2]/div/div[2]/div[2]/div[1]/input') \.send_keys('xxxxx')driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div/div[2]/div/div[2]/div/div[2]/div[2]/div[2]/span/input') \.send_keys('xxxxx')time.sleep(1)#点击登录按钮driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div/div[2]/div/div[2]/div/div[2]/div[2]/div[4]/button').click()time.sleep(2)#获取滑块按钮slider = driver.find_element_by_id('nc_1_n1z')#拖动滑块action_chains = ActionChains(driver)action_chains.click_and_hold(slider).perform()action_chains.move_by_offset(xoffset=random.randint(380,450), yoffset=0).perform()# action_chains.release(slider).perform()time.sleep(3)alert = EC.alert_is_present()(driver)if alert:print('出现弹窗')alert.accept()try:WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.CLASS_NAME, 'nr-pro-menu-wrap')))cookie = driver.get_cookies()except UnexpectedAlertPresentException:driver.switch_to.alert.accept()WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.CLASS_NAME, 'nr-pro-menu-wrap')))cookie = driver.get_cookies()for item in cookie:c = "{}={}".format(item['name'],item['value'])c_list.append(c)cookiestr = ';'.join(c_list)print(cookiestr)if 'token' in cookiestr:self.redis_cli.lpush('ksxk_cookies',cookiestr)print('登录成功')breakelse:time.sleep(1)except:traceback.print_exc()等这10个网站的爬虫研究完 , 会针对所有的登录问题 , 滑块问题 , js混淆的问题等出一个垂直系列 , 敬请期待