Java获取新浪微博cookies

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import org.apache.http.client.CookieStore;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.cookie.BasicClientCookie;
import org.openqa.selenium.By;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

public class GetMultiCookieMSinaTimely {

    public static void main(String[] args) throws Exception {
        /*if(args.length == 3) {
            GetMultiCookieMSinaTimely.cookieFile = args[0];
            GetMultiCookieMSinaTimely.chromedriverPath = args[1];
            GetMultiCookieMSinaTimely.cookieSavePath = args[2];
        } else {
            System.out.println(new Date() + "three args:cookieFile path,chromedriver path,cookie save path");
            System.exit(0);
        }*/
        GetMultiCookieMSinaTimely.cookieFile = "E:\\学习\\微博爬虫\\cookie\\user.txt";
        GetMultiCookieMSinaTimely.chromedriverPath = "E:\\学习\\微博爬虫\\cookie\\chromedriver.exe";
        GetMultiCookieMSinaTimely.cookieSavePath = "E:\\学习\\微博爬虫\\cookie\\";
        if(new File(GetMultiCookieMSinaTimely.cookieFile).isFile()) {
            GetMultiCookieMSinaTimely getCookies = new GetMultiCookieMSinaTimely();
            getCookies.getCookie();
        } else {
            System.err.println(new Date() + "args is not a file!");
        }

    }

    private static String cookieFile;
    private static String chromedriverPath;
    private static String cookieSavePath;
    private int cookieNumber;
    public GetMultiCookieMSinaTimely() {
    }

    public void getCookie() throws IOException, InterruptedException {
        if(cookieFile == null || cookieFile.equals("")) {
            System.err.println(new Date() + "no emailpw File!");
            return;
        }
        cookieNumber=0;
        File loginFile = new File(cookieFile);
        FileInputStream fis=new FileInputStream(loginFile);
        InputStreamReader isr=new InputStreamReader(fis, "UTF-8");
        BufferedReader br = new BufferedReader(isr);
        String temp;

        ChromeOptions options = new ChromeOptions();
        options.addArguments("test-type");
        System.setProperty("webdriver.chrome.driver", chromedriverPath);

//        ChromeDriverService service = new ChromeDriverService.Builder()
//                .usingDriverExecutable(new File(chromedriverPath)).usingAnyFreePort().build();
//        service.start();

        List<String> uselessList = new LinkedList<String>();

        while((temp = br.readLine()) != null) {
            oneCookie(temp, uselessList);
        }
        List<String> tempUselessList = new LinkedList<String>();
        while(uselessList.size()>0){
            tempUselessList.clear();
            for(String s:uselessList) {
                oneCookie(s, tempUselessList);
            }
            uselessList.clear();
            uselessList.addAll(tempUselessList);
        }
        br.close();
        // 关闭 ChromeDriver 接口
//        service.stop();
//        System.out.println("ok!");
    }

    private void oneCookie(String temp, List<String> uselessList) {
        try {
            String[] username_password = temp.split("\\|");
            WebDriver driver = new ChromeDriver();
            driver.manage().timeouts().pageLoadTimeout(100, TimeUnit.SECONDS);
            System.out.println(new Date() + "logging... "+ temp);
            driver.get("https://passport.weibo.cn/signin/login");

            try {
                (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
                    public Boolean apply(WebDriver d) {
                        return  d.findElement(By.id("loginName")) != null;
                    }
                });
            }catch(TimeoutException e) {
                System.out.println(new Date() + "TimeoutException,add "+temp+" to uselessList!");
                uselessList.add(temp);
                driver.quit();
                return;
            }
            Thread.sleep(1500);

            WebElement username = driver.findElement(By.id("loginName"));
            username.click();
            username.clear();
            username.sendKeys(username_password[1]);
            WebElement password = driver.findElement(By.id("loginPassword"));
            password.click();
            password.clear();
            password.sendKeys(username_password[2]);
            WebElement submit = driver.findElement(By.id("loginAction"));
            submit.click();
            try {
            (new WebDriverWait(driver, 5)).until(new ExpectedCondition<Boolean>() {
                public Boolean apply(WebDriver d) {
                    return d.getTitle().toLowerCase().startsWith("微博");
                }
            });
            }catch(TimeoutException e) {
                System.out.println(new Date() + "useless account,add "+temp+" to uselessList!");
                uselessList.add(temp);
                driver.quit();
                return;
            }
    //        System.out.println(cookieNumber);
    //        System.out.println("success");
            Set<Cookie> allCookies = driver.manage().getCookies();

            try {
                CookieStore cookiestore = new BasicCookieStore();
                for (@SuppressWarnings("rawtypes")
                Iterator iterator = allCookies.iterator(); iterator.hasNext();) {
                    Cookie cookie = (Cookie) iterator.next();
                    BasicClientCookie bcookie = new BasicClientCookie(cookie.getName(), cookie.getValue());
                    bcookie.setDomain(cookie.getDomain());
                    bcookie.setExpiryDate(cookie.getExpiry());
                    bcookie.setPath(cookie.getPath());
                    cookiestore.addCookie(bcookie);
                }

                new File(cookieSavePath).mkdirs();
                //FileWriter fWriter=null;
                //BufferedWriter bw=null;
                //PrintWriter pWriter=null;
                File file = new File(cookieSavePath+"/cookie.file" + cookieNumber++);
                //fWriter =new FileWriter(cookieSavePath+"/cookie"+cookieNumber++);
                //bw=new BufferedWriter(fWriter);
                //pWriter=new PrintWriter(bw);
                //pWriter.write(cookiestore.toString());
                FileOutputStream fos = new FileOutputStream(file);
                ObjectOutputStream oos = new ObjectOutputStream(fos);
                System.out.println("cookile:"+cookiestore);
                oos.writeObject(cookiestore);
                oos.close();
                fos.close();
            } catch (IOException e) {
                System.out.println("IOException,add "+temp+" to uselessList!");
                uselessList.add(temp);
            }
            driver.quit();
        } catch(Exception e) {
            e.printStackTrace();
            System.out.println("Exception,add "+temp+" to uselessList!");
            uselessList.add(temp);
            return;
        }
        System.out.println(new Date() + "logging succeed! "+ temp);
    }

}
时间: 2024-10-21 19:24:08

Java获取新浪微博cookies的相关文章

Java调用 新浪微博API 接口发微博,逐条讲解,绝对清晰

最近要做个课程设计,使用微博控制树莓派,树莓派再控制发光二极管的亮和灭,主要设计分两层,上层是用Java调用新浪微博API来实现对微博旳监听,当我的微博被回复时能够自动读取评论内容,并根据评论的指令内容来决定树莓派的控制动作.下层是用C语言调用操作系统底层接口来实现用树莓派GPIO接口控制发光二极管的闪烁.亮灭. 由于网上教程都很老了,最近微博接口发生了很多变化,所以我决定全新写一篇详细的博文,如若能对您起到帮助作用,那将是我莫大的荣幸.同时我非常希望能与您交流,有问题请在评论里回复我. 本文将

通过JAVA获取优酷视频

通过JAVA获取优酷视频,现在很多社会网站都有这个功能,用户输入优酷视频地址后,能找到对应的视频及视频的缩略图,有些社区网站还能获取到视频的时长. 比如:新浪微博就有这个功能,当用户输入视频网址后,就能获取到相应的视频地址及视频的缩略图. 01 import java.io.IOException; 02 import java.io.UnsupportedEncodingException; 03 import java.net.MalformedURLException; 04 05 imp

js/java 获取、添加、修改、删除cookie(最全)

一.cookie介绍 1.cookie的本来面目 HTTP协议本身是无状态的.什么是无状态呢,即服务器无法判断用户身份.Cookie实际上是一小段的文本信息(key-value格式).客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie.客户端浏览器会把Cookie保存起来.当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器.服务器检查该Cookie,以此来辨认用户状态. 2.cookie本来运行机制 当用户第一

java 获取文件名(不包括文件的后缀)和文件重命名

获取文件名(不包括后缀) originalFileName.substring(0, originalFileName.lastIndexOf(".")) 文件重命名 public void renameFile(String file, String toFile) { File toBeRenamed = new File(file); //检查要重命名的文件是否存在,是否是文件 if (!toBeRenamed.exists() || toBeRenamed.isDirector

java获取天气预报数据

获取天气预报数据 对于做web项目有天气数据的需求,这个服务很合适: WebXml.com.cn 2400多个城市天气预报Web服务,包含2300个以上中国城市和100个以上国外城市天气预报数据.数据每2.5小时左右自动更新一次,准确可靠.提供webservice 接口,主连接:http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/ 方法调用说明如下: (1)getRegionCountry :获得国外国家名称和与之对应的ID 说明

Java获取.properties文件

@SuppressWarnings("rawtypes") public static void getProperties() { Properties properties = null; InputStream in = null; try { properties = new Properties(); //获取文件 in = Object.class.getResourceAsStream("/config.properties"); properties

java 获取网络地址图片

收藏一个获取网络图片的方法. 1 //获取网络图片 2 public void ImageRequest(String ImageName,String GifUrl) throws Exception { 3 //new一个URL对象 4 URL url = new URL(GifUrl); 5 //打开链接 6 HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 7 //设置请求方式为"GET" 8 c

java获取天气预报的信息

运行效果: 主要功能: 1,jsp页面输入省份和城市 根据条件获取当地的天气信息 2,java代码 利用第三方的省份和城市的路径地址 本工程主要实现java获取天气预报的信息步骤1,创建工程weatherDemo2,创建包结构3,创建类4,访问第三方接口 打开主机方法5,获取省份id方法6,获取市id方法7,获取天气的方法8,编写servlet9,发布运行 java代码 创建WeatherDemo类 /** * @version 1.0 * @author ren * 天气预报的核心接口 * *

Java获取网络IP

Java获取获取网络IP,浅尝辄止咯- 1 import java.net.InetAddress; 2 import java.net.UnknownHostException; 3 4 /** 5 * 获取网络IP 6 * 1.获取本地的IP地址 7 * 2.获取本机的服务器名称 8 * 3.获取远程服务器的主机IP地址 9 * 4.获取远程服务器的所有主机IP 10 * 11 * 网络编程: 12 * InetAddress 是用来封装IP地址相关信息的类 13 * getLocalHos