系列文章目录

第一篇:Java实现QQ登录


文章目录

  • 系列文章目录
  • 前言
  • 登录
    • selenium登录
    • 登录流程
    • selenium操作
    • 获取登录数据
    • 完整代码
  • 总结

前言

本文内容仅供学习参考,禁止商业用途

上篇文章中主要介绍如何利用java,通过模拟http的形式登录QQ,但是这种方式会因为tx更新密码加密算法而失效,所以本篇文章中会介绍如何通过Selenium来实现QQ的自动化登录


经过本人分析,因为浏览器在发送login之后,response body中并没有返回,而是将一系列登录信息都存放在cookie里了,那么就带来了另外一种登录方式。

登录

selenium登录

selenium可以实现自动的操作,就像人在浏览器中操作一样,而且通过配置,可以得到当前网页中的cookie和操作日志。

登录流程

详细登录流程见https://blog.csdn.net/majixiang1996/article/details/112651478

同样本文以登录https://lol.qq.com为例

在本文描述的登录方式中,只需要

  • 打开登录页
  • 点击切换到密码登录
  • 输入账号密码
  • 点击登录按钮
  • 获取cookie

这五个步骤,简单快捷稳定,只需要qq登录页没有大的改动的话,就不需要做改动。

selenium操作

  • 打开登录页
  // 登录主页driver.get("https://lol.qq.com/space/index.shtml");// 最大化driver.manage().window().maximize();// tx登录按钮在一个子iframe里,所以要把driver转向这个iframeWebDriver sd = driver.switchTo().frame(driver.findElement(By.id("loginIframe")));
  • 切换到密码登录
// 打开主页面的时候,是弹出二维码登录,所以需要找到切换按钮,切换成账号密码登录
WebElement sw = sd.findElement(By.id("switcher_plogin"));
// 登录按钮点击
sw.click();
  • 输入账号密码
driver.findElement(By.id("u")).sendKeys("your qq number");
driver.findElement(By.id("p")).sendKeys("your password");
  • 点击登录
driver.findElement(By.id("login_button")).click();
  • 获取cookie
// 将cookie全部打出到控制台
driver.manage().getCookies().stream().forEach(c -> System.out.println(c.toString()));

获取登录数据

在登录后的一堆数据中,我们需要拿到p_skey这个参数,但是p_skey这个cookie的domain是game.qq.com,而当前的url为lol.qq.com,直接输出cookie是拿不到这个值的,需要先重定向到game.qq.com

  driver.get("https://game.qq.com");

不能通过执行js打开另外一个window,因为如果这样原window的cookie就拿不到了。

然后在cookie中就会发现p_skey这个参数

后续的操作只需要拿着这个p_skey即可访问各种接口

完整代码

     System.setProperty("webdriver.chrome.driver", "C:\\Program Files\\Google\\Chrome\\Application\\chromedriver.exe");ChromeDriverProxy driver = null;ChromeOptions options = new ChromeOptions();options.addArguments("--disable-popup-blocking"); // 禁用阻止弹出窗口options.addArguments("no-sandbox"); // 启动无沙盒模式运行options.addArguments("disable-extensions"); // 禁用扩展options.addArguments("no-default-browser-check"); // 默认浏览器检查Map<String, Object> prefs = new HashMap();prefs.put("credentials_enable_service", false);prefs.put("profile.password_manager_enabled", false);// 禁用保存密码提示框options.setExperimentalOption("prefs", prefs);// set performance logger// this sends Network.enable to chromedriverLoggingPreferences logPrefs = new LoggingPreferences();logPrefs.enable(LogType.PERFORMANCE, Level.ALL);logPrefs.enable(LogType.BROWSER, Level.ALL);options.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);options.setExperimentalOption("w3c", false);// if your wantn't open the chrome head, you can set it true.// options.setHeadless(true);driver = new ChromeDriverProxy(options);driver.get("https://lol.qq.com/space/index.shtml");// login.driver.manage().window().maximize();WebDriver sd = driver.switchTo().frame(driver.findElement(By.id("loginIframe")));WebElement sw = sd.findElement(By.id("switcher_plogin"));sw.click();driver.findElement(By.id("u")).sendKeys("your qq number");driver.findElement(By.id("p")).sendKeys("your qq password");driver.findElement(By.id("login_button")).click();System.out.println(driver.getCurrentUrl());// select the lol area.Thread.sleep(2000);WebElement area = driver.findElement(By.id("areaContentId_lol"));Select select = new Select(area);select.selectByValue("19");driver.findElement(By.id("roleselecterlol")).click();Thread.sleep(2000);area.click();driver.findElement(By.id("confirmButtonId_lol")).click();Thread.sleep(1500);// get cookie.String newWindowUrl = "https://game.qq.com/";driver.get(newWindowUrl);driver.manage().getCookies().stream().forEach(c -> System.out.println(c.toString()));driver.manage().getCookies().stream().forEach(c -> System.out.println(c.getName() + "\t" + c.getValue()));pSkey = driver.manage().getCookieNamed("p_skey").getValue();System.out.println(pSkey);System.out.println(driver.manage().getCookieNamed("skey").getValue());

总结

通过selenium的方式登录无验证的QQ 方便快捷,而且稳定性比较高。所以本人是比较推荐使用这种方法去登录的。

最终的效果图如下:

下篇文章中将介绍有验证码的情况下的登录方式。

Selenium QQ自动化登录相关推荐

  1. Selenium+PhantomJS自动化登录爬取博客文章

    selenium采集页面元素 phantomjs主要是模拟登录 也没多少说的,上代码吧 from selenium import webdriver import selenium.webdriver ...

  2. selenium进行QQ空间登录

    一.selenium简要说明 selenium是基于浏览器自动化的一个模块,它能便捷的获取网站中动态加载的数据,和实现模拟登录.爬虫等操作 二.实现流程 2.1 selenium前置操作 1. 安装s ...

  3. python+opencv+selenium自动化登录邮箱并解决滑动验证

    前言 大家做自动化登录时可能都遇到过滑块验证码需要手动验证的问题,这次我们就来解决他 如下:   在我们做自动化登录时,总会遇到各种奇奇怪怪的验证码,滑块验证码就是其中最常见的一种.若我们的程序自动输 ...

  4. python selenium自动化断言_python+selenium自动化登录测试,设计不同场景进行登录,两种方式断言,截图保存...

    # coding : utf-8 # date :2019/1/7 # 根据不同场景做自动化登录测试 # 正确账号密码.正确账户错误密码.等其他场景 from selenium import webd ...

  5. python selenium自动化获取oracle,python27+selenium3自动化登录测试

    #encoding:utf-8 ''' 方法:通过selenium的webdriver模块结合unittest单元测试框架自动化登录系统,下文枚举了几个测试用例登录情况,其中包括用户名和密码的验证以及 ...

  6. selenium实现模拟点击QQ一键登录

    涉及到知识点: Xpath frame切换 分析 以彼岸桌面壁纸为例,爬取很多原图时需要用户登录(花钱才可以下载诸多原图,普通用户只可以一天只可以下载一次原图,在这里使用QQ一键登录全当练练手). 以 ...

  7. python3爬虫系列21之selenium自动化登录163邮箱并读取未读邮件内容

    python3爬虫系列21之selenium自动化登录163邮箱并读取未读邮件内容 1.前言 前面在 python3爬虫系列20之反爬需要登录的网站三种处理方式中介绍的第三种方法,使用自动化测试工具s ...

  8. 使用selenium模拟动态登录QQ邮箱爬取收件箱内容放在CSV文件中

      获取收件箱列表信息就是使用selenium实现模拟登录.点击收件箱链接.获取收件箱列表的html过程,然后就是正常的查找数据 1.我们首先就是要登录到QQ邮箱中,然后找到收件箱的页面的,才能爬取到 ...

  9. 微博自动化登录(selenium+cookie)

    文章目录 前言 一.首先分析网页 二.编写代码 总结 前言 本次呢我讲俩种方法,一种是单纯的selenium自动化登录,这种方法经测试不太行.因为单纯使用账号密码登录微博现在行不通,还需要手机验证码. ...

最新文章

  1. rtti是什么java_RTTI
  2. HDU 2444:The Accomodation of Students(二分图判定+匹配)
  3. 48.孩子们的游戏(圆圈中最后剩下的数)
  4. 五句话足以改变人生[转]
  5. java 输出中文_没见过的 Java 编程入门教程!例程使用中文标识符代码:问个好吧...
  6. 计算机没有cpu会怎么样,电脑cpu不好会怎么样
  7. zabbix之 qq邮件报警
  8. Python处理CSV大文件特定行数据
  9. wampserver的下载与安装配置
  10. Atitit 软件体系的进化,是否需要一个处理中心
  11. CCNA学习指南 IP路由
  12. 刺激战场测试fps软件,绝地求生刺激战场通过GLTools实时显示游戏帧数方法
  13. SpringBoot - @DependsOn注解详解
  14. 基于vue transform: translateY 上下滑动实现
  15. OpenGL 驱动 与 扩展的关系
  16. 不同类型游戏音效竟有不同制作方法?—动作类型音效制作
  17. sdcc对应stc51单片机
  18. Android性能优化—— 黑白屏启动优化
  19. win10计算机证书管理器,win10系统iE浏览器导入数字证书的详细办法
  20. Unity3D常用的生命周期函数

热门文章

  1. 实验课第四次随堂测试
  2. linux不出现图形界面的解决方法
  3. ANSYS Workbench 16 - 黄志新(图书阅读总结)
  4. 联想拯救者屏幕亮度无法调节,监视器和显卡驱动问题,经过多种测试
  5. 9条消除if...else的锦囊妙计,解决代码的坏味道!
  6. 为什么D类音频功放可以免输出滤波器
  7. vue 仿B站下拉刷新上拉加载
  8. 关于C++中公有继承、私有继承、保护继承的讨论
  9. SQL Server AlwaysOn
  10. python怎么编写对称图案_如何使用opencvpython识别图像的形状是对称的还是不对称的?...