实现所有网站的qq登录返回登录后的cookie信息

news/2024/5/16 19:08:42/文章来源:https://yumbo.blog.csdn.net/article/details/112727425

开源地址:https://github.com/1015770492/autoLoginQQWithAnyWeb

注意:如果你下载了源码,想在自己的windows环境下测试,将源码中top.yumbo.music.test.configuration.ChromeAutoConfigration
指定chromedriver路径的注释打开,并且指向正确的chromedriver路径,(chromedriver是驱动,同时也需要电脑上有chrome浏览器)

// 打开注释并且将值设置为正确的路径
System.setProperty("webdriver.chrome.driver", "D:/Program Files (x86)/chromedriver/chromedriver.exe");

windows和linux都差不多,只要环境搭建好,然后再执行程序就能实现快速登录

全局参数说明

项目中暴露了两类接口:(post/get都可以,也支持json字符串的请求)
返回数据的格式:format如果不填默认返回Cookie对象


一类是已经写好了的登录,例如qq音乐、网易云音乐、csdn网站直接在请求路径中就能表现处理
一类是需要传入登录页面的url进行登录

第一个类接口的使用方式:

请求路径:/login/qq/{name} name是在枚举对象中定义WebLoginEnum,两个参数的构造方法 第一个参数就是name,第二个参数就是登录页面的url
QQ音乐登录在线地址格式:
http://yumbo.top:7000/login/qq/music?username=qq号&password=qq密码&format=2
网易云音乐登录在线地址格式:
http://yumbo.top:7000/login/qq/netease?username=qq号&password=qq密码&format=2
csdn
QQ音乐登录在线地址格式(post/get都可以,也支持json字符串):
http://yumbo.top:7000/login/qq/csdn?username=qq号&password=qq密码&format=2

第二个接口的使用方式

请求路径: /login/qq
在线地址格式:

注意:注意url编码问题,传入的url直接复制浏览器地址栏即可,如果是自己抓包分析出来的则注意编码
http://yumbo.top:7000/login/qq?username=qq号&password=qq密码&format=2&url=登录页面的url

想要见效果的看这篇博客有gif演示效果:

java+selenium-java 实现qq自动登录并获取cookie

完整的环境搭建过程

github显示不了图片的到csdn看我博客:实现所有网站的qq登录返回登录后的cookie信息

原理和实现

第一步给Linux服务器安装google-chrome(谷歌浏览器)

Centos操作系统的使用下面这个

下载rpm包

wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

安装依赖

sudo yum install -y lsb

进行安装

sudo yum localinstall google-chrome-stable_current_x86_64.rpm

Ubuntu用户的使用下面的
下面命令建议不使用root身份进行下载
因为可能会报权限问题:
N: Download is performed unsandboxed as root as file ‘/root/google-chrome-stable_current_amd64.deb’ couldn’t be accessed by user ‘_apt’. - pkgAcquire::Run (13: Permission denied)


下载deb包

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

安装deb包

sudo apt install -y ./google-chrome-stable_current_amd64.deb

完成后Centos和Ubuntu都会多一个命令

google-chrome

第二步,下载chromedriver 它的作用是操作google-chrome浏览器,也就是通过它来对谷歌浏览器操作的

下载地址:https://npm.taobao.org/mirrors/chromedriver/

随便选一个吧,我选的是这个版本的:https://npm.taobao.org/mirrors/chromedriver/86.0.4240.22/

在这里插入图片描述
将它上传到linux服务器上,通过FTP工具
ftp工具 例如:FileZila下载页面选择适合自己的
或者xftp
ftp 工具 和 chromedriver也可以通过下面的csdn进行下载,我将它打包成了一个zip包。也可以选择前面发的链接自行下载接口
https://download.csdn.net/download/qq_41813208/14503894

将他上传到一个目录下,例如/root
在这里插入图片描述

授予执行权限

执行完后就会是绿色的提示。

chmod 777 chromedriver

第三步、下载jar包,或者去github自行打成jar包

jar包下载地址:https://github.com/1015770492/autoLoginQQWithAnyWeb/releases/tag/1.0
在这里插入图片描述

java环境需要先弄好
Ubuntu用:apt install -y openjdk-14-jre-headless进行安装即可
Centos用:yum install -y java-11-openjdk-devel.x86_64安装即可(如果需要配置环境变量自行配置即可)

是一个springboot项目,端口是:7000,可以通过运行参数-Dserver.port修改启动端口

提醒

-Dwebdriver.chrome.driver是指定驱动的位置,请更改为正确的位置

在这里插入图片描述
如果是默认的root目录下操作更改对应得路径即可

java -jar -Dwebdriver.chrome.driver=/root/chromedriver \
-Dserver.port=7000 autoLoginQQWithAnyWeb-1.0.jar

第四步发送请求得到cookie信息

get/post都支持,接收json/传参数
如下
接口地址:http://yumbo.top:7000/login/{name}
qq音乐在线地址:http://yumbo.top:7000/login/music
网易云音乐在线地址:http://yumbo.top:7000/login/netease
csdn在线地址:http://yumbo.top:7000/login/csdn

下面是qq音乐的登录地址(qq音乐它不会跳转到后面的那个界面,需要通过抓包分析)
替换下面的username和password即可完成登录获取登录qq音乐后的cookie
方便复制:下面的这个模板只适合qq音乐,其它网站则根据后面参数补充的那个页面直接复制url代替这里参数的url即可

http://yumbo.top:7000/login/qq/music?username=qq号&password=qq密码&format=2

在这里插入图片描述

参数补充说明

以CSDN的登录页面为例子,请求的地址如下
在这里插入图片描述

经过上面的地址就会跳转到下面的这个页面(由上面那个地址自动转到这个请求授权的页面)
这里面有一个过程,那个地址的服务器会自动向腾讯的oauth2.0服务器发请求,然会返回这个统一的授权页面,因为这个页面是统一的,所以我写好了脚本,它就会自动点击账号密码登录===> 输入账号和密码 ==> qq登录成功后就会自动跳转到回调的地址,然后获取登录成功后的cookie

然后就碰运气了,一般如果是按照我上面的方式获取到的url 应该是不需要进行拖拽验证的那个步骤的
在这里插入图片描述

枚举网站的登录页面地址,然后访问该地址,输入用户名和密码进行登录,登录成功后会自动重定向到登录后的页面,进行一次刷新页面,然后获取cookie,将cookie以json对象的方式返回{"cookie":"cookie字符串或原生数组"}

处理请求的Controller源码

package top.yumbo.music.test.controller;import com.alibaba.fastjson.JSONObject;
import org.openqa.selenium.By;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import top.yumbo.music.test.web.WebLoginEnum;import javax.annotation.Resource;
import java.util.Set;@RestController
public class LoginController {@ResourceChromeDriver chromeDriver;@ResourceWebDriver.Options manage;/*** cookie数据的处理** @param cookies 传入cookie的集合* @return k1=v1;k2=v2;  这种形式的cookie字符串*/private String parseCookieSet(Set<Cookie> cookies) {if (cookies == null) {return "";}System.out.println("\n解析前cookie是" + cookies.toString());String cookieString = "";for (Cookie cookie : cookies) {if (StringUtils.hasText(cookie.getValue())) {// 为空的cookie则去除cookieString += (cookie.getName() + "=" + cookie.getValue() + ";");}}System.out.println("解析后:\n" + cookieString);return cookieString;}@GetMapping({"/login/qq/{name}"})public JSONObject commonLogin(@RequestBody(required = false) JSONObject jsonObject,@PathVariable(value = "name") String name,@RequestParam(value = "username", required = false) String username,@RequestParam(value = "password") String password,@RequestParam(value = "format", required = false, defaultValue = "1") String format) {if (StringUtils.hasText(username) && StringUtils.hasText(password)) {// 什么也不做} else if (jsonObject != null&& StringUtils.hasText(jsonObject.getString("username"))&& StringUtils.hasText(jsonObject.getString("password"))) {username = jsonObject.getString("username");password = jsonObject.getString("password");} else {final JSONObject error = new JSONObject();if (jsonObject != null) {error.put("输入了错误的信息", jsonObject);} else {final JSONObject info = new JSONObject();info.put("username", username);info.put("password", password);error.put("输入了错误的信息", info);}return error;}return LoginAndGetCookie(username, password, name, format);}/*** 登录已知类型的网站** @param username qq账号* @param password qq密码* @param name     枚举登录页面的封装类,如果hashMap中没有则这个name就是登录页面的地址* @param format   返回的cookie类型,1表示原cookie数据,2表示处理后的cookie* @return json类型的cookie封装类*/public JSONObject LoginAndGetCookie(String username, String password, String name, String format) {final JSONObject cookieJson = new JSONObject();try {// 登录前先清除cookiefinal String url = WebLoginEnum.getUrl(name);if (!StringUtils.hasText(url)) {cookieJson.put("msg", "网站没有引入项目,请使用另外一个接口进行登录");return cookieJson;}manage.deleteAllCookies();// 清除cookiechromeDriver.get(url);// 访问登录页面final WebDriver ptlogin_iframe = chromeDriver.switchTo().frame("ptlogin_iframe");ptlogin_iframe.findElement(By.id("switcher_plogin")).click();final WebElement u = ptlogin_iframe.findElement(By.className("inputstyle"));u.clear();// 清空输入的用户名u.sendKeys(username + "\n");// 输入账号final WebElement p = ptlogin_iframe.findElement(By.id("p"));p.clear();// 清空输入的密码数据p.sendKeys(password + "\n");// 输入密码,回车就提交了下面的这个点击登录不需要final String beforeUrl = chromeDriver.getCurrentUrl();while (chromeDriver.getCurrentUrl().equals(beforeUrl)) {// 页面没有跳转就让他等待,等待自己重定向到登录后的页面,然后再获取cookie时就是正确的cookie}System.out.println("=======等待登录成功后跳转到页面<<<<<<<<<<<");chromeDriver.navigate().refresh();// 刷新页面获取cookie,不然会导致cookie数据有问题//获得cookieSet<Cookie> coo = manage.getCookies();// 得到所有cookie//打印cookieSystem.out.println(coo);if (format.equals("2")) {final String cookie = parseCookieSet(coo);cookieJson.put("cookie", cookie);// 解析cookie并添加} else {cookieJson.put("cookie", coo);}manage.deleteAllCookies();// 每次登录完就清除cookie} catch (Exception e) {System.out.println("抛异常了");e.printStackTrace();}return cookieJson;}/*** @param jsonObject 可选,目的是兼容json数据,可能客户端两种都传* @param url        可选,目的是兼容json数据,可能客户端两种都传* @param username   qq账号* @param password   qq密码* @param format     默认1返回的cookie为json,传入的不是1则返回精简版的cookie* @return cookie类型的json数据,cookie咋json的cookie字段中*/@Deprecated@RequestMapping(value = "/login/qq", method = {RequestMethod.GET, RequestMethod.POST})public JSONObject loginQQBackCookie(@RequestBody(required = false) JSONObject jsonObject,@RequestParam(value = "url", required = false) String url,@RequestParam(value = "username", required = false) String username,@RequestParam(value = "password") String password,@RequestParam(value = "format", required = false, defaultValue = "1") String format) {if (StringUtils.hasText(url) && StringUtils.hasText(username) && StringUtils.hasText(password)) {// 什么也不做} else if (jsonObject != null && StringUtils.hasText(jsonObject.getString("url")) &&StringUtils.hasText(jsonObject.getString("username")) &&StringUtils.hasText(jsonObject.getString("password"))) {url = jsonObject.getString("url");username = jsonObject.getString("username");password = jsonObject.getString("password");format = jsonObject.getString("format");} else {final JSONObject error = new JSONObject();if (jsonObject != null) {error.put("输入了错误的信息", jsonObject);} else {final JSONObject info = new JSONObject();info.put("username", username);info.put("password", password);info.put("url", url);info.put("format", format);error.put("输入了错误的信息", info);}return error;}return LoginAndGetCookie(username, password, url, format);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_777331.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决Fiddler Everywhere无法捕捉浏览器的请求问题,以及意外退出Fiddler Everywhere导致谷歌浏览器访问不了网站

今天又用到了Fiddler Everywhere又遇到了上次同样的问题&#xff0c;Fiddler Everywhere捕捉不到请求。 细想一下Fiddler Everywhere的作用&#xff0c;当我们打开它的时候本质上就是启动了一个代理服务器&#xff0c;也就是系统的所有http请求都经过Fiddler后台的服务器进行转…

监控网站服务质量出图学习后续篇

前面我们已经学习过了&#xff0c;如何收集网站服务质量的一些相关数据&#xff0c;然后通过入库出图&#xff0c;开始打算是用rrdtool做画图&#xff0c;但是经过一段时间的研究&#xff0c;发现echarts出图合理和美观&#xff0c;下面贴出我实时收集到的数据和出图展示部分: …

网页制作中点一张图片变成图片浏览式_做网站为什么要做响应式网站?

“响应式建站”又被称为HTML5建站、H5 响应式建站。响应式网站做为目前网站建设的主导方向,越来越多的网站建设者选择建设响应式网站。那么到底什么是响应式设计?什么是响应式建站?什么是响应式网站呢? 移动互联网发展迅速。随着智能手机的普及&#xff0c;互联网用户更喜欢…

selenium-java 实现QQ音乐自动登录获取cookie数据,爬取qq音乐会员资源和网易云音乐会员资源。实现任意网站的会员资源爬取

javaselenium-java 实现qq自动登录功能并获取cookie 下面是网易云音乐的qq自动功能演示&#xff0c;cookie信息在控制台中会打印出来。---->下一步就是利用这个cookie实现网站资源的爬取。 下面是qq音乐的自动登录 CSDN的自动登录 源代码如下 import org.openqa.selenium.*…

架构师---(大型网站分布式架构)

#参考资料大型分布式网站架构设计与实践 #感悟&#xff1a;书读百遍&#xff0c;其意自见 #QQ群北京it—推荐–交流&#xff1a;300458205 #群专注内推、大数据、云计算、Java、Android、UI等技术交流&#xff0c;欢迎你的加入。 看的越多&#xff0c;发现会的越少&#xff…

架构师---(大型网站技术架构核心原理与案例分析)1大型网站架构演化

#参考资料大型网站技术架构核心原理与案例分析&#xff08;作者李智慧&#xff09; #1初始阶段的网站架构 小型网站起初访问量不是很高&#xff0c;只需要一台服务器就可以了。通常我们的部署将应用程序、数据库、文件等所有的资源都在一台服务器上。通常服务器操作系统为linux…

从码农到架构师---设计大型网站架构模式和核心要素

参考资料大型网站技术架构核心原理与案例分析&#xff08;作者李智慧&#xff09; 参考资料架构修炼之道(作者王新栋) 网关 1-API网关的基本功能与七种措施 2-如何设计一个API: 常用工具(设计API和生成API文档) RAML和Swagger RAML的五个过程 Design->Build->Test->…

java spring boot + Selenium 爬取网站简单使用

chromedriver 下载 首先下载chromedriver 这个驱动 注意: 看一下Chrome 浏览器版本 选择合适对应的chromedriver 版本 pom引入 <!-- selenium-java --><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</ar…

网站 nginx http 升级 https

首先下载 nginx wget -c https://nginx.org/download/nginx-1.10.1.tar.gz然后解压 tar -zxvf nginx-1.10.1.tar.gz注意这里 如果你以前有nginx 在启动目录里使用 ./nginx -V 看看是否有 with-http_ssl_module 这个模块 如果没有请按照http升级https(转)这篇文章升级(本人也是参…

高并发高流量网站架构

Web2.0的兴起&#xff0c;掀起了互联网新一轮的网络创业大潮。以用户为导向的新网站建设概念&#xff0c;细分了网站功能和用户群&#xff0c;不仅成功的造就了一大批新生的网站&#xff0c;也极大的方便了上网的人们。但Web2.0以用户为导向的理念&#xff0c;使得新生的网站有…

db2怎么限定查询条数_SEO优化怎么样呢?如何做seo?

SEO优化怎么样呢&#xff1f;如何做seo&#xff1f;网站上线后不是给自己看的&#xff0c;更多的情况下是给用户看的。seo优化的作用在于提升网站关键词自然排名&#xff0c;便于用户搜索&#xff0c;便于提高用户通过相关关键词看到网站的概率。通常所说的搜索引擎优化&#x…

WEB网站压力测试方案 压力测试如何换算并发用户数

http://wenku.baidu.com/view/bedf1a93daef5ef7ba0d3c29.html 压力测试通过确定一个系统的瓶颈或者不能接收的性能点&#xff0c;来获得系统能提供的最大的服务级别的测试。通俗地讲&#xff0c;压力测试是为了发现在什么条件下您的应用程序的性能会变得不可接受。 极限压力测…

正在尝试其它镜像_网站被镜像了该如何解决?

相信很多站长遇到最头疼的事就是网站被镜像了吧&#xff0c;自己辛苦做出来的网站一下就被别人镜像了&#xff0c;心里一定不好受。网站镜像是什么意思呢&#xff1f;就是当你搜索你的网站&#xff0c;你会发现突然多出了很多和你的网站一模一样的网站&#xff0c;它们除了域名…

php 网站的拼接方法,第五天 ThinkPHP手把手快速拼接网站(五)

6月11日&#xff0c;晴天。“梅子留酸软齿牙&#xff0c;芭蕉分绿与窗纱。日长睡起无情思&#xff0c;闲看儿童捉柳花。”十、后台编写-续-21、改写Login模块的login方法 &#xff0c;主要是改M方法为D方法class LoginAction extends Action {function index() {// 配置页面显…

项目符号css样式,制作现代网站和应用程序时CSS项目符号样式

在本文中&#xff0c;我们将讨论无序列表&#xff0c;在制作现代网站和应用程序时&#xff0c;无序列表的发展是不可避免的。你是否做了很多很多名单的粉丝&#xff1f;我也不是。但是&#xff0c;这里我们不是在谈论家务或购物清单。我们正在讨论制作现代网站和应用程序时不可…

使用Apache的Proxy模块实现对被代理网站的访问

为已编译的apache2添加mod_proxy模块 和应用 http://help.lampok.net/log/?p1525这篇文章试过可以&#xff0c;在apache2.2.23版本的时候。blog.51yip.com/apachenginx/873.htmlhttp://shiningray.cn/proxypass-directive-in-apache.html查看apache支持的模块&#xff1a; htt…

asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)

自从腾讯微博上线以来&#xff0c;基本上就开始用了&#xff0c;一直到现在&#xff0c;作为一个开发人员&#xff0c;也看到了腾讯微博一直在不停的改变&#xff0c;也不知道大家有没有发现&#xff0c;腾讯微博提供两种加载数据的方式&#xff0c;一种是分页&#xff0c;一种…

Java小应用目录快速变网站

1. 简介 快速将一个目录变成静态站点的Java小应用 2. 程序下载 https://github.com/broncho/oss/raw/master/blog/directory-website-1.0.0.jar 3. 依赖环境 JRE 1.6 4. 使用说明 5. 运行

电商实例、业务并发、网站并发及解决办法

电商实例、业务并发、网站并发及解决方法 一、怎么防止多用户同一时间抢购同一商品&#xff0c;防止高并发同时下单同一商品 最近在做抢购系统&#xff0c;但头疼的是&#xff0c;在多用户高并发的情况下经常会库存出现问题。排查到&#xff0c;在同一时间内多用户同时下单导致…

nginx网站性能优化篇(4)】理解nginx的高并发原理及其配置调优

Nginx 是如何实现高并发的? Nginx 采用的是多进程&#xff08;单线程&#xff09; & 多路IO复用模型。使用了 I/O 多路复用技术的 Nginx&#xff0c;就成了”并发事件驱动“的服务器。其实现了异步&#xff0c;非阻塞&#xff0c;使用了epoll 和大量的底层代码优化。 如…