写个程序自动下载留言,没辙了:(
刚写了个HTML文件解析器,生成简单的Element树,包括所有元素。
虽然有很多解析HTML的api,只是我只要用那么一点点功能,写一下也很快。
类:HTMLElement、HTMLParser、LoginAgent
目的是为了用程序去自动下载留言页面,使用HttpURLConnection post登录,搜索出loginForm的所有input,只需特别设置用户密码即可。
但是,页面打开后,里面的链接居然还要post数据,问题是input的值是页面上的javascript设置的,所以InputStream下载得到的没有值,晕倒!!没辙了。
package com.forum;
import java.io.*;
/**
*
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author zfzheng 猪神
* @version 1.0
*/
public class HTMLParser {
public static HTMLElement buildHTMLElementFromFile(String fileName)throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(fileName),"GB2312"));
String line;
StringBuffer result=new StringBuffer();
while((line=br.readLine())!=null){
result.append(line);
}
br.close();
return buildHTMLElementFromString(result.toString());
}
public static HTMLElement buildHTMLElementFromString(String data){
HTMLElement root=new HTMLElement();
HTMLElement parent=root;
root.setPrototypeString("根节点");
HTMLElement e=null;
char[] chs=data.toCharArray();
char ch;
int i=0;
StringBuffer tagName=new StringBuffer();
boolean inCommont=false;
boolean tagDefineBegin=false;
boolean tagDefineEnd=false;
while(i<chs.length){
ch=chs[i];
if(inCommont){
tagName.append(ch);
if(chs[i]=='>' && i-2>=0 && chs[i-1]=='-' && chs[i-2]=='-'){//注释结束
inCommont=false;
}
continue;
}
switch(ch){
case '<':{
if(i+1<chs.length && chs[i+1]!='/'){
tagDefineBegin = true;
tagDefineEnd=false;
e = new HTMLElement();
}else if(i+3<chs.length&& chs[i+1]=='!' &&chs[i+2]=='-' &&chs[i+3]=='-'){//注释
tagName.append(ch);
inCommont=true;
}else{//标记结束,等下一个循环
}
break;
}
case '>':{
if(tagDefineEnd){//结束
if (HTMLElement.isContentTag(tagName.toString())) { //可包含的标记结束,父节点返回上一层
if (parent.getParent() != null) { //返回上一层父节点
parent = parent.getParent();
}
}
}else{
tagDefineBegin = false;
e.setPrototypeString(tagName.toString());
parent.addChildren(e);
e.setParent(parent);
if (HTMLElement.isContentTag(e.getTagName())) { //可包含的标记
parent = e;
}else{
tagDefineEnd=true;
}
}
tagName.setLength(0);
break;
}
case '/':{
if(i>0 && chs[i-1]=='<'){
tagDefineEnd=true;
tagName.setLength(0);
}
break;
}
default:{
if(tagDefineBegin){
tagName.append(ch);
}else if(tagDefineEnd){
tagName.append(ch);
}
break;
}
}
i++;
}
return root;
}
public static void main(String[] args) {
HTMLParser.buildHTMLElementFromString("<html><head><title> New Document </title><meta name='Generator' content='EditPlus'><meta ame='Author' content=''><meta name='Keywords' content=''><meta name='Description' content=''></head><body></body></html>").dump();
try {
HTMLParser.buildHTMLElementFromFile("d:/bb.htm").dumpHTML();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
写个程序自动下载留言,没辙了:(相关推荐
- 用Java写一个电影自动下载器
你好! 下面是一些步骤来帮助你写一个电影自动下载器: 建立一个新的Java项目 选择一个电影下载网站作为数据源, 并使用网络爬虫或API来获取电影的信息(如标题, 时长, 格式, 大小等) 使用Jav ...
- c#实现客户端程序自动下载更新(单独程序)
首先,自己工作需要实现客户端程序的自动更新下载,下面简单介绍自己实现逻辑和遇到的一些问题及解决方法 信息基本都是通过XML文件配置的,下文本地需要更新的程序简称为主程序 实现步骤简介: 1.获取本地程 ...
- 手机 查看java源码_pin.java 源代码在线查看 - 一个专门为手机写的程序 资源下载 虫虫电子下载站...
/*********************************************************************** * * *软件:公交路线选择软件 *作者:李蛟 *学校 ...
- 从谷歌和译典通能上自动下载英语单词mp3的好方法
从谷歌和译典通能上自动下载英语单词mp3的好方法 最近在学英语,很多单词不怎么会读.每次得去iciba.com和dreye.com上查,很是麻烦! 后来一想,能不能写个程序自动下载?测试一番,最终搞定 ...
- 【Python实战】批量爬取微博素材,一分钟百张大图自动下载
目录 前言 一.思考逻辑 二.观察URL 三.微博爬虫 四.下载保存 结尾 前言 大家好,我是Samaritan. 这期本来想做个咸鱼 写个学习笔记发的,然后没做成咸鱼 临时变卦,再写一期实战. 事情 ...
- 通过脚本自动下载麦咖啡病毒升级包
前些天在一个blog上看到有人用python写了一个脚本,通过抓取网页然后分析,可以实时监控有没有火车票转让,并且把结果发送到自己的Gtalk中.感觉很好玩.今天我也写了一个自动下载麦咖啡病毒升级包的 ...
- STC单片机自动下载调试器设计
目录 简介 改进方案 1. 解决思路 2. 电路设计 3. 软件 测试结果 参考文献 简介 在推文<全自动STC下载电路设计>中给出了利用STC单片机的ISP程序自动下载调试板的是设计.使 ...
- 央行公开市场操作(正逆回购、MLF)数据自动下载及分析
在做外汇掉期交易的时候,除了需要关注中美息差的走势,也需要了解市场流动性的松紧程度.央行的公开市场操作是市场流动性拼图里面非常重要的一块.实际工作中,有些资讯系统(例如Bloomberg)可以调出央行 ...
- 论ESP32自动下载电路
1.先来看看ESP32手册说明的启动运行方式 由上图可知,ESP32有SPI启动模式(正常启动)与下载启动模式两种,要实现程序自动下载肯定是需要上电时自动进入下载启动模式,方法就是将GPIO0与GPI ...
最新文章
- Windows2003 IIS安装
- python常考题_Python语言基础考察点:python语言基础常见考题(一)
- Oracle把逗号分割的字符串转换为可放入in的条件语句的字符数列
- 在win10系统下怎样快速切换任务视图
- LeetCode 2114. 句子中的最多单词数
- [深度学习-原理]浅谈Attention Model
- c语言编程题一空几分,C语言编程规范试题
- 计算机图书管理属于计算机应用中的,计算机在图书管理中应用探究.doc
- Visual Studio 2017 通过SSH 调试Linux 上.NET Core
- setmaximumsize java_setMaximumSize为什么不起作用
- ligerui php mysql_ligerui中3级联动的数据库例子
- EditRocket for Mac(源代码编辑器)v4.5.10
- AGC022E Median Replace
- 计算机会计信息系统的数据处理方式一般,《会计信息系统复习资料.doc
- siri中文语音助理_2020年人工智能和语音控制的7项新发展
- hp电脑测试软件,HP惠普笔记本电池检测工具Battery Check V4.1.0.2中文官方版
- 贪心科技机器学习训练营(十一)
- ctf————逆向新手题8(logmein)WP
- 不管发生什么事,最重要的是拥有乐观积极的心态,困难总会过去的。
- Java使用三层架构、JDBC连接数据库完成《试题信息管理系统》