使用JAVA实现模拟登陆并发送新浪微博(非调用新浪API)
没有调用新浪的API,在程序中加入自己的帐号和密码就能发送微博,代码完全在后台运行,不用打开浏览器。
用了HtmlUnit这个库来模拟登录还有发送微博。
先上效果图:
这个是刚登陆上获取第一页的信息。

发送微博:


没什么难的地方,找到相应的按钮和文本域,然后点击,简单说就是用代码模仿用户的操作。
public class weibo {
    public static void main(String args[]) throws FailingHttpStatusCodeException, MalformedURLException, IOException, InterruptedException{
        //新浪微博登录页面
        String baseUrl = "https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=http%3A%2F%2Fm.weibo.cn%2F";
        //打开
        WebClient webClient = new WebClient(BrowserVersion.CHROME);
        webClient.addRequestHeader("User-Agent", "Mozilla/5.0 (iPad; CPU OS 7_0_2 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A501 Safari/9537.53");
        //webClient.addRequestHeader("User-Agent", "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.122 Mobile Safari/537.36");
        HtmlPage page = webClient.getPage(baseUrl);
        //等待页面加载
        Thread.sleep(1000);
        //获取输入帐号的控件
        HtmlInput usr = (HtmlInput) page.getElementById("loginName");
        usr.setValueAttribute("Your Account");
        //获取输入密码的控件
        HtmlInput pwd = (HtmlInput) page.getElementById("loginPassword");
        pwd.setValueAttribute("Your Password");
        //点击登录
        DomElement button = page.getElementById("loginAction");
        page =(HtmlPage) button.click();
        //等待页面加载
        Thread.sleep(1000);
        //获取到“写微博”这个按钮,因为这个按钮没有name和id,获取所有<a>标签
        DomNodeList<DomElement> button2 = page.getElementsByTagName("a");
        //跳转到发送微博页面
        page =(HtmlPage)button2.get(4).click();
        //等待页面加载
        Thread.sleep(1000);
        //获取发送控件 标签为<a>中的2个
        DomNodeList<DomElement> button3 = page.getElementsByTagName("a");
        //获取文本宇
        HtmlTextArea content =(HtmlTextArea) page.getElementById("txt-publisher");
        DomElement fasong = button3.get(1);
        content.focus();
        Date date = new Date();
        //填写你要发送的内容
        content.setText("使用JAVA发送微博!!!!\n"+date);
        //改变发送按钮的属性,不能无法发送
        fasong.setAttribute("class", "fr txt-link");
        //发送!!!
        page = (HtmlPage)fasong.click();
        Thread.sleep(5000);
        System.out.println(page.asText());
    }
}
好啦,就是这么简单!
使用JAVA实现模拟登陆并发送新浪微博(非调用新浪API)的更多相关文章
- java 根据ip获取地区信息(淘宝和新浪)
		
package com.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr ...
 - java调用新浪接口根据Ip查询所属地区
		
import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import ...
 - Java发布webservice应用并发送SOAP请求调用
		
webservice框架有很多,比如axis.axis2.cxf.xFire等等,做服务端和做客户端都可行,个人感觉使用这些框架的好处是减少了对于接口信息的解析,最主要的是减少了对于传递于网络中XML ...
 - Java开发新闻管理系统(前后端)+爬虫百度、新浪等新闻
		
ForFuture News 新闻管理系统 项目演示地址:http://www.ganquanzhong.top [注]:文档下 ...
 - Java实现模拟登录新浪微博
		
毕设题目要使用到新浪微博数据,所以要爬取新浪微博的数据.一般而言,新浪微博的爬虫有两种模式:新浪官方API和模拟登录新浪微博.两种方法的异同点和适用情况就无须赘述了.前辈的文章已经非常多了.写这篇文章 ...
 - Python模拟登陆新浪微博
		
上篇介绍了新浪微博的登陆过程,这节使用Python编写一个模拟登陆的程序.讲解与程序如下: 1.主函数(WeiboMain.py): import urllib2 import cookielib i ...
 - Scrapy模拟登陆
		
1. 为什么需要模拟登陆? #获取cookie,能够爬取登陆后的页面 2. 回顾: requests是如何模拟登陆的? #1.直接携带cookies请求页面 #2.找接口发送post请求存储cooki ...
 - 手把手教你用新浪云容器 Java 搭建自己的网站
		
经过一段时间的开发,更新,迭代,新浪云容器 Java 环境逐渐成熟起来,相比过去的 Java 运行环境,可用性和易用性都得到了大量的提升.同时也收到了不少用户反馈的使用问题,特此在这篇文章里综合介绍一 ...
 - 根据新浪天气API获取各地天气状况(Java实现)
		
原文出自 参考网址(重要) http://blog.csdn.net/cyxlzzs/article/details/7602469 新浪 http://blog.csdn.net/l_ch_g/a ...
 
随机推荐
- mongodb停止遇到shutdownServer failed: unauthorized: this command must run from localhost when running db without auth解决方法
			
停止mongodb use admin db.shutdownServer(); mongos> db.shutdownServer(); assert failed : unexpected ...
 - Week2《Java程序设计》第二周学习总结
			
Week02-Java学习笔记2 1. 本周学习总结 本周学习了java的基本语法与类库,其中介绍了基本数据类型和引用类型,介绍了String类,String对象的拼接以及String的一些常用方法: ...
 - laravel发送邮件
			
这里已163为例: 1..env文件配置和mail.php配置(默认使用.env) MAIL_DRIVER=smtp MAIL_HOST=smtp.163.com MAIL_PORT=465 MAIL ...
 - 目标跟踪之ECO:Efficient Convolution Operators for Tracking
			
一. 相关滤波算法总结 作者首先分析了 影响相关滤波算法效率 和 导致过拟合 的几个原因: 1)Model Size (模型大小) 包括两个方面: - 模型层数,对应多分辨率 Sample,比如多层 ...
 - Leetcode 1005. Maximize Sum Of Array After K Negations
			
class Solution(object): def largestSumAfterKNegations(self, A, K): """ :type A: List[ ...
 - 【剑指offer】数组中的逆序对,C++实现
			
原创博文,转载请注明出处!本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 2.思路 3.代码 class Solution { public: int InversePa ...
 - FZU   Problem 2129 子序列个数
			
看了 dp 方程之后应该是妙懂 每次 加入一个数,×2 然后剪掉重复的: 重复的个数 维前面那个数,,,,, #include<iostream> #include<stdio.h ...
 - webpack中多模块依赖
			
多模块依赖 刚才的例子,我们仅仅是跑通了webpack通过entry.js入口文件进行打包的例子.下面我们就来看一下它是否真的支持CommonJs和AMD两种模块机制呢?下面我们新建多几个js文件吧! ...
 - 三个Telnet链接类----来自网络
			
声明:下面的三个类都是从网上找到的,具体出处不详,哪个类的好坏性能优劣自己把握,可参考使用.拒绝使用商业用途,如产生版权纠纷和本人无关. 一:Telnet链接网络设备,在网上看到C#Telnet连接网 ...
 - Oracle变量的定义、赋值及使用
			
首先我们来看看代码,然后我们在说明和解释代码: declare l_dept ; currtime date := sysdate; l_nam ) :),'yyyymmdd'); -- to_cha ...