主题:SWING实现新浪微博客户端(2)提取关注好友信息

java swing 模拟新浪微博 简单的java swing 编写的新浪微博用户登陆客户端。 在本地运行时,需要自己修改config.properties中client_ID和client_SERCRET属性的值。这两个值需要自己通过注册得到。 立即下载
思路:
当用户登录完成后,(登录问题请参见,SWING实现新浪微博客户端(1)自动登录功能 )
1,模拟用户动作自动进入关注好友页面
2,根据关注好友页面结构提取关注好友的用户信息
3,将用户信息发送到后台,(例子中是在CONSOL中输出)

一,分析URL地址结构通过分析得知关注用户的URL地址为 http://t.sina.com.cn/2023096077/follow
而登录成功后的地址为



二,根据关注好友页面结构提取关注好友的用户信息





三,将用户信息发送到后台,(例子中是在CONSOL中输出)



Java代码   收藏代码
  1. import java.awt.BorderLayout;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileNotFoundException;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7. import java.io.InputStream;  
  8. import java.net.URL;  
  9. import java.util.Properties;  
  10.   
  11. import javax.swing.BorderFactory;  
  12.   
  13. import javax.swing.JFrame;  
  14. import javax.swing.JPanel;  
  15. import javax.swing.SwingUtilities;  
  16.   
  17.   
  18. import chrriis.common.UIUtils;  
  19. import chrriis.dj.nativeswing.swtimpl.NativeInterface;  
  20. import chrriis.dj.nativeswing.swtimpl.components.JWebBrowser;  
  21. import chrriis.dj.nativeswing.swtimpl.components.WebBrowserAdapter;  
  22. import chrriis.dj.nativeswing.swtimpl.components.WebBrowserCommandEvent;  
  23.   
  24. import chrriis.dj.nativeswing.swtimpl.components.WebBrowserNavigationEvent;  
  25.   
  26.   
  27.   
  28.   
  29.   
  30. public class SSOSina extends JPanel {  
  31.   
  32.   protected static final String LS = System.getProperty("line.separator");  
  33.    private static final  String  loginUrl="http://t.sina.com.cn";  
  34.      
  35.    private static  Properties  userProperties=new Properties();  
  36.       
  37.   public SSOSina() {  
  38.     super(new BorderLayout());  
  39.       
  40.     InputStream in = this.getClass().getResourceAsStream("userProperties.properties");  
  41.     if (in == null) {  
  42.         in = Thread.currentThread().getContextClassLoader().getResourceAsStream("userProperties.properties");  
  43.         if (in == null) {  
  44.             in = this.getClass().getClassLoader().getResourceAsStream("userProperties.properties");  
  45.         }  
  46.     }  
  47.       
  48.     try {  
  49.         userProperties.load(in);  
  50.     } catch (IOException e1) {  
  51.         e1.printStackTrace();  
  52.     }  
  53.       
  54.     JPanel webBrowserPanel = new JPanel(new BorderLayout());  
  55.     webBrowserPanel.setBorder(BorderFactory.createTitledBorder("DJNative JAVA浏览器实现 实现新浪微博自动登录"));  
  56.     final JWebBrowser webBrowser = new JWebBrowser();  
  57.     webBrowser.setBarsVisible(true);  
  58.     webBrowser.setDefaultPopupMenuRegistered(true);  
  59.     webBrowser.setStatusBarVisible(true);  
  60.      
  61.     webBrowser.navigate(loginUrl);  
  62.     //单点登录自动提交监听器  
  63.     class SaveUserListener extends WebBrowserAdapter{  
  64.            @Override  
  65.            public void commandReceived(WebBrowserCommandEvent e) {  
  66.              String command = e.getCommand();  
  67.              Object[] parameters = e.getParameters();  
  68.              if("print".equals(command)) {  
  69.                String html = (String)parameters[0] ;  
  70.                System.out.println(html);  
  71.              }  
  72.              if("saveuser".equals(command)) {  
  73.                 String loginname = (String)parameters[0] ;  
  74.                 String password = (String)parameters[1] ;  
  75.              userProperties.setProperty("loginname", loginname);  
  76.              userProperties.setProperty("password", password);  
  77.                 try {  
  78.                     String runningURL = (new URL(SaveUserListener.class  
  79.                             .getProtectionDomain().getCodeSource().getLocation(),  
  80.                             ".")).openConnection().getPermission().getName();  
  81.                     userProperties.save(new   FileOutputStream(new File(runningURL+"userProperties.properties")),"changed");  
  82.                       
  83.                 } catch (FileNotFoundException e1) {  
  84.                     e1.printStackTrace();  
  85.                 } catch (IOException e1) {  
  86.                   
  87.                     e1.printStackTrace();  
  88.                 }       
  89.                 
  90.              }  
  91.            }  
  92.              
  93.     }  
  94.       
  95.       
  96.     class ReLoginListener extends WebBrowserAdapter{  
  97.               public void locationChanged(WebBrowserNavigationEvent e) {  
  98.                 if (e.getNewResourceLocation().equals("http://t.sina.com.cn")){  
  99.                       userProperties.setProperty("loginname", "");  
  100.                        userProperties.setProperty("password", "");  
  101.                     try {  
  102.                         String runningURL = (new URL(SaveUserListener.class  
  103.                                 .getProtectionDomain().getCodeSource().getLocation(),  
  104.                                 ".")).openConnection().getPermission().getName();  
  105.                         userProperties.save(new   FileOutputStream(new File(runningURL+"jdsclient_init.properties")),"changed");  
  106.                           
  107.                     } catch (FileNotFoundException e1) {  
  108.                         e1.printStackTrace();  
  109.                     } catch (IOException e1) {  
  110.                       
  111.                         e1.printStackTrace();  
  112.                     }       
  113.                     
  114.                    
  115.                          
  116.                 String script="function saveuser(){" +LS+  
  117.                  "sendNSCommand('saveuser',document.getElementById('loginname').value,document.getElementById('password').value);"+LS+  
  118.                  "void(0);" +LS+  
  119.                  "}" +LS+  
  120.                  "document.getElementById('login_submit_btn').href=\"javascript:'saveuser()'\";document.getElementById('login_submit_btn').attachEvent('onclick',saveuser);" +LS+  
  121.                  "alert('用户名密码错误请重新输入');" +LS+  
  122.                  "";  
  123.                            e.getWebBrowser().executeJavascript(script);  
  124.                         }  
  125.                    
  126.                }  
  127.      
  128.      }  
  129.     class GetUserListener extends WebBrowserAdapter{  
  130.           public void locationChanged(WebBrowserNavigationEvent e) {  
  131.               
  132.               //判断登录成功进入首页  
  133.                  if( e.getWebBrowser().getPageTitle().indexOf("我的首页 ")>-1){  
  134.                      String url=e.getNewResourceLocation();  
  135.                     String id=url.substring(url.lastIndexOf("/")+1, url.length());   
  136.                      e.getWebBrowser().navigate("http://t.sina.com.cn/"+id+"/follow");//跳转到用户关注页面  
  137.                  }  
  138.           
  139.               if (e.getNewResourceLocation().endsWith("/follow")){  
  140.                     
  141.                   //首先重写App.followcancel方法,修改为输出到控制台的日志  
  142.                   //跟据HTML规则提取关注用户HTML,再模拟点击  
  143.                      String script="var tagName='a';" +  
  144.                             " App.followcancel=function(id,div,type,name,sex)" +  
  145.                             "{" +  
  146.                             "sendNSCommand('print','id='+id+';'+'name='+name)" +  
  147.                             "};" +  
  148.                             "var allA=document.all.tags(tagName);" +  
  149.                             "for(var i=0 ;i<allA.length;i++){" +  
  150.                             "if (allA[i].outerHTML.indexOf('App.followcancel(')>-1)" +  
  151.                             "{" +  
  152.                             "allA[i].click();" +  
  153.                             "sendNSCommand('print',allA[i].outerHTML)" +  
  154.                             "}" +  
  155.                             "}";  
  156.                      e.getWebBrowser().executeJavascript(script);  
  157.                 
  158.             }       }      
  159.      }  
  160.         
  161.   
  162.       
  163.     class SsoListener extends WebBrowserAdapter{  
  164.           public void locationChanged(WebBrowserNavigationEvent e) {  
  165.               if (e.getNewResourceLocation().equals("http://t.sina.com.cn/")){  
  166.                 String loginname= userProperties.getProperty("loginname")  ;  
  167.                 String password= userProperties.getProperty("password")  ;  
  168.                 if ((loginname!=null &&!loginname.equals(""))  && (password!=null && !loginname.equals(""))){  
  169.                      String script="document.getElementById('loginname').value='"+loginname+"';" +LS+  
  170.                     "document.getElementById('password').value='"+password+"';" +LS+  
  171.                     "document.getElementById('login_submit_btn').click();";  
  172.                      e.getWebBrowser().executeJavascript(script);  
  173.                   //此处为修改代码  
  174.                        
  175.                        
  176.                      e.getWebBrowser().removeWebBrowserListener(this);//关闭当前监听  
  177.                   
  178.                       
  179.                     //此处为修改代码  
  180.                 }else{  
  181.                  String script="function saveuser(){" +LS+  
  182.                  "sendNSCommand('saveuser',document.getElementById('loginname').value,document.getElementById('password').value);"+LS+  
  183.                
  184.                  "}" +LS+  
  185.                  "document.getElementById('login_submit_btn').attachEvent('onclick',saveuser);" +LS+  
  186.                  "alert('存储的用户名密码为空,请输入用户名密码')" +LS+  
  187.                  "";  
  188.                     e.getWebBrowser().executeJavascript(script);  
  189.                     e.getWebBrowser().removeWebBrowserListener(this);  
  190.                     e.getWebBrowser().addWebBrowserListener(new ReLoginListener());  
  191.   
  192.                 }  
  193.                   
  194.               }else{  
  195.                   System.out.println(e.getNewResourceLocation());  
  196.               }  
  197.           }            
  198.      }  
  199.       
  200.     
  201.       
  202.   
  203.     webBrowser.addWebBrowserListener(new SaveUserListener());  
  204.     webBrowser.addWebBrowserListener(new SsoListener());  
  205.     webBrowser.addWebBrowserListener(new GetUserListener());//添加GetUserListener  
  206.       
  207.     webBrowserPanel.add(webBrowser, BorderLayout.CENTER);  
  208.     
  209.     add(webBrowserPanel, BorderLayout.CENTER);  
  210.   
  211.   }  
  212.     
  213.   
  214.   public  InputStream loadResource(String name) {  
  215.       InputStream in = this.getClass().getResourceAsStream(name);  
  216.       if (in == null) {  
  217.           in = Thread.currentThread().getContextClassLoader().getResourceAsStream(name);  
  218.           if (in == null) {  
  219.               in = this.getClass().getClassLoader().getResourceAsStream(name);  
  220.           }  
  221.       }  
  222.       return in;  
  223.   }  
  224.     
  225.   public static void main(String[] args) {  
  226.     UIUtils.setPreferredLookAndFeel();  
  227.     NativeInterface.open();  
  228.     SwingUtilities.invokeLater(new Runnable() {  
  229.       public void run() {  
  230.         JFrame frame = new JFrame("测试新浪微博登录");  
  231.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  232.         frame.getContentPane().add(new SSOSina(), BorderLayout.CENTER);  
  233.         frame.setSize(800, 600);  
  234.         frame.setLocationByPlatform(true);  
  235.         frame.setVisible(true);  
  236.       }  
  237.     });  
  238.     NativeInterface.runEventPump();  
  239.       
  240.   }  
  241.    
  242.   
  243. } 

java生成截图源码和jar包 使用 WebBrowsersuper(new BorderLayout()); final JPanel webBrowserPanel = new JPanel(new BorderLayout()); webBrowser.setBarsVisible(false); webBrowser.navigate(url); webBrowserPanel.add(webBrowser, BorderLayout.CENTER); add(webBrowserPanel, BorderLayout.CENTER); JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 4, 4)); System.out.println("======" + Thread.currentThread().getId()); webBrowser.addWebBrowserListener(new WebBrowserAdapter() { 立即下载

相关推荐

VS Code + EIDE + Clangd 构建 Keil/MDK 嵌入式开发新范式

嵌入式C/C++开发长期受限于传统IDE的语法理解弱、导航卡顿、跨工程复用难等问题。Clangd作为基于AST的现代语言服务器,结合EIDE对Keil uVision和ARM MDK工程文件(.uvprojx)的深度解析能力,可将编译配置、芯片型号、内存模型、扩展关键字等语义精准翻译为标准compile_commands.json,从而实现智能跳转、宏展开识别、结构体实时展开等高阶编辑体验。该方案不替换Keil/MDK编译与烧录流程,仅升级代码理解层,天然兼容STC8051、STM32 Cortex-M、G

weixin_34321753的博客 352

AWT和Swing的区别

二、AWT和Swing的区别 AWT是AbstractWindowToolKit(抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口。AWT中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系,我们把它称为peers。也就是说,当我们利用AWT来构件图形用户界面的时候,我们实际上是在利用操作系统所提供的图形库。由于不同操作系统的图形库所提供的功能是不一样的...

dianyi0505的博客 768

SIMPLIS仿真软件2.2-SIMPLIS快速入门2

SIMPLIS仿真软件2.2-SIMPLIS快速入门2导读 导读 本文承接上一篇文章。开始介绍SIMPLIS仿真部分。正如上一篇所讲的快速入门的定位,该文对SIMPLIS的三种分析模式不会很深入的讲解,只会记录下一些重要的设置和操作。对于SIMPLIS的三种分析模式的详细讲解,后面会专门撰写。如果读者还没有搭建上一篇文章中讲述的电路,那你可以点击这个链接免费下载所需的电路SIMPLIS_tutorial_buck_converter ,然后在这个电路的基础上继续进行以下操作。 ...

qq_44677482的博客 2万+

DJNativeSwing是flash和swing如何通信

1.flash给swing发送消息: ExternalInterface.call("sendNSCommand", "request", msg.toString()); 这里的sendNSCommand是DJNativeSwing已经实现的方法,直接调用即可。

xuyangtiger1的专栏 3154

STM32踩坑--NoST-LINK detected

这里出现的NoST-LINK detected是没有扫描到端口 在我使用一段Fly-MCU后,有一天突然发现出现如上错误,再检查的过程中检查以下几点 1.STM32 魔术棒的设置 1.1Debug设置 1.2 utilities 设置没有问题,与原来一样又看了下端口——在设备管理器中;也没有问题 ...

qq_53002477的博客 2万+

使用autodl服务器运行CasMVSNet以及使用colmap产生的数据

MVSNet学习

qq_44708206的博客 3274

Atitit.android webview h5运行环境总结

Atitit.android webview h5运行环境总结   1. WebView 的使用1 2. Js调用java1 3. Js调用java 跟个swt的比较2 3.1. Swt是BrowserFunction 机制,绑定了个自定义方法2 3.1.1. nativeswing的实现 预绑定一个sendNSCommand方法2 4. code2 5. Webview code4    ...

weixin_33851429的博客 188

SpringBoot3 + Vben5.0实战:从零搭建企业级管理后台(附完整代码)

本文详细介绍了如何从零开始,使用SpringBoot3与Vben5.0技术栈搭建现代化企业级管理后台。通过对比分析,阐述了该组合在开发效率、性能(如虚拟线程)和权限模型(RBAC)方面的优势,并提供了从项目初始化、核心功能开发到部署运维的完整实战指南,帮助开发者快速构建高性能、易维护的后台系统。

weixin_29306317的博客 171

java操作swing界面嵌入的浏览器

if(e.getNewResourceLocation().equals("http://www.weibo.com/")) {   String script = "function getuser(){"     + LS     + "sendNSCommand('getuser',document.getElementsByName('username')[0].value,docume...

devilzhi的专栏 905

N5105 PVE UEFI核显直通Windows:从黑屏到HDMI输出的实战调优

本文详细介绍了在N5105处理器上实现PVE UEFI核显直通Windows的实战调优方法。针对黑屏和HDMI音频无法识别等常见问题,提供了系统参数调整、驱动模块加载、虚拟机配置等解决方案,帮助用户成功实现核显直通并优化性能。

weixin_42566424的博客 203

王者荣耀AI绝悟如何选英雄?

王者荣耀AI绝悟如何选英雄? 【抢射手?抢中单位?「绝悟」在打王者荣耀时是如何选英雄的?】 腾讯 AI Lab 开发的 AI 智能体「绝悟」已让王者峡谷不再只是人类召唤师的竞技场,而且这个 AI 战队在上月底进化成了「完全体」。在一局完整的比赛中,英雄选择阶段是至关重要的(比如五射手或五法师阵容会有官方劝退)。 近日,腾讯 AI Lab 和上海交通大学发布的一篇论文介绍了绝悟的英雄选择策略:Ju...

不断学习,不断进步,提高自己 1万+

html5 java 交互_atitit.js 与c# java交互html5化的原理与总结.doc

atitit.js与c#java交互html5化的原理与总结.doc1.实现html5化界面的要解决的策略1.1.Js交互Firefox与Chrome也提供了external对象,例如,他们都默认的实现了opensearch的两个外部方法:AddSearchProviderIsSearchProviderInstalledChrome下,可以在控制台输入window.external看到。F...

weixin_28797725的博客 228

破盾实录|Vueling航空阿卡迈防护逆向:从503挑战到Cookie生成的全流程拆解

摘要:文章分享了作者在爬取西班牙伏林航空(Vueling)机票数据时,遭遇阿卡迈(Akamai)防护系统的实战经历。起初简单的请求被拦截返回503错误,分析发现阿卡迈通过混淆JS代码实施"挑战-验证"机制,需模拟真实浏览器环境才能获取有效Cookie。作者详细拆解了逆向过程:从抓包分析JS挑战流程,到破解代码混淆和控制流平坦化,最终用Python+Pyppeteer成功模拟浏览器特征,突破防护获取数据。整个过程涉及JS反混淆、环境检测绕过和Cookie生成验证等关键技术点,为类似防护系统

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1642

SWING实现新浪微博客户端(2)提取关注好友信息

思路: 当用户登录完成后,(登录问题请参见,SWING实现新浪微博客户端(1)自动登录功能 ) 1,模拟用户动作自动进入关注好友页面 2,根据关注好友页面结构提取关注好友的用户信息 3,将用户信息发送到后台,(例子中是在CONSOL中输出) 一,分析URL地址结构通过分析得知关注用户的URL地址为 http://t.sina.com.cn/2023096077/follo...

wenzhangli 204

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java新浪微博客户端开发第四、五步

0、Main:主函数入口;1、MainDialog:主界面;2、WeiboPanel:StatusPanel及CommentPanel的父类;3、 StatusPanel:所有有关“微博”的父类...... AD:   这一步是对之前进行较大的改动。增加的类也比较多。包结构如下: 0、Main:主函数入口 1、MainDialog:主界面 2、Weib...

Devil不加V 311

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SWING实现新浪微博客户端(1)自动登录功能 (2)提取关注好友信息

http://www.iteye.com/topic/962862

u010935362的专栏 549

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97

atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97     1. 实现html5化界面的要解决的策略1 1.1. Js交互1 1.2. 动态参数个数2 1.3. 事件监听2 1.4. 异常转换2 2. dwrC.exec3 2.1. 支持 ajax 与browExt模式  支持反射,直接继承调用后台api3 2....

weixin_33797791的博客 217

atitit.javascript调用java in swt attilax 总结

atitit.javascript调用java in swt attilax 总结   1. BrowserFunction 简介1 1.1. BrowserFunction 可以分为三类: 1 1.2. 事件监听2 2. ati的实现2 2.1. 页面调用2 2.1.1. --------nativeswing的实现2 2.2. java代码2 3. ---code4 4. 参考5   1....

weixin_34121282的博客 140

Java Swing嵌入浏览器

Java Swing嵌入浏览器

daixinmei 5232

SWING实现新浪微博客户端(1)自动登录功能

最近在做一些,基于浏览器的应用整合项目。使用到了DJNative (一种JAVA浏览器实现http://sourceforge.net/projects/djproject/files/DJ%20Native%20Swing/0.9.9%20preview/DJNativeSwing-SWT-0-9-9-20110224.zip/download),对于一些进行接口开发的业务整合系统,提供了一种不...

wenzhangli 296

atitit.js 与c# java交互html5化的原理与总结.doc

atitit.js 与c# java交互html5化的原理与总结.doc   1. 实现html5化界面的要解决的策略1 1.1. Js交互1 1.2. 动态参数个数1 1.3. 事件监听2 2. sendNSCommand2 2.1.1. --------nativeswing的实现2 3. 注册js 事件后台函数3 4. 后台c#3 5. 参考4   1. 实现html...

weixin_33892359的博客 160

html5 java后台交互_atitit.js javascript 調用c# java php后台語言api html5交互的原理與總結p97...

atitit.jsjavascript調用c#javaphp后台語言apihtml5交互的原理與總結p971.實現html5化界面的要解決的策略1.1.Js交互Firefox與Chrome也提供了external對象,例如,他們都默認的實現了opensearch的兩個外部方法:AddSearchProviderIsSearchProviderInstalledChrome下,可以在控制...

weixin_35019679的博客 237

Atitit.使用引擎加脚本架构的设计 使用php,js来开发桌面程序。。

Atitit.使用引擎加脚本架构的设计 使用php,js来开发桌面程序。。     1. 引擎加脚本架构 跨平台,桌面与web的优势 1 2. 架构桌面引擎(java,c#) 2 3. php桌面引擎要点 2 3.1. 运行环境:同时支持cs桌面与web方式 2 3.2. 界面使用html5+css+js实现 2 3.3. Cli接口互操作,与web接口互操作 2 3.4. 其他------...

weixin_34219944的博客 302

java sendcommand 函数_解决Java Redis删除HashMap中的key踩到的坑

现象Java使用Redis删除HashMap中的key时,取出对应的HashMap后通过Java中HashMap的remove方法移除key然后重新调用redis的Hmset方法将覆盖无效示例代码//通过key取出对应的HashMapMap ruleMap = jedisCluster.hgetAll("HashKey");//通过java中移除HashMap中的KeyruleMap.remove...

weixin_35644453的博客 625
上一篇: 传说中的Java烟花程序
下一篇: Java论坛汇总
coollor
博客等级 码龄15年 48粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值