2018-06-10

前几天买了小米8,但是出厂版本是miui9 ,升级到miui10暂时只有内测组玩家才行。积分回复一天限制50贴,每帖两个积分,但是亲测如果超过50贴的话,每个帖子0.5个积分。所以刷帖还是可行的。自行刷论坛积分太累了。于是写了个脚本。具体思路是:找到论坛里最新回复里面的某个帖子,然后在帖子里复制某个用户的评论,发表出来,如果没有评论过的话,就回复固定的:mark一下之类的这样的回答。

(2018-6-12更新,这样的默认回复已经被论坛删除,还有选取的一些刷积分的回复被直接copy过来也被论坛删除了。所以对脚本进行了一点更新。我已经放在下面。6-11已进内测,祝大家玩的开心。)

(2018-06-13更新,在米8论坛看到好多用这个脚本刷的回复。感觉离被封不远了,因为之前选定的回复是默认第一页最后一个回复。现在做了做修改。改成随机了。希望这样的回复看上去更正常一些吧!)

需要环境:

  1. Java,

  2. Chrome

具体过程:

0. Java的配置

百度教程很多。

1. 配置chrome-driver

1.下载chromedriver,http://chromedriver.storage.googleapis.com/index.html?path=2.36/

  1. Mac OS: 将chromedriver复制到/User/local/bin文件夹

  2. Windows: 配置chromedriver的文件夹路径到环境变量Path

2.安装selenium

  1. 下载selenium,http://selenium‐release.storage.googleapis.com/3.9/selenium‐server‐standalone‐3.9.1.jar

  2. 将下载的selenium jar导入到项目内。

3.代码

注意修改下面的登录名和密码

public static void test(WebDriver driver) {
        //小米8论坛界面
        driver.get("http://www.miui.com/forum-773-1.html");
        waitSecond(1);
        //小米登陆界面
        driver.get("https://account.xiaomi.com/pass/serviceLogin");
        JavascriptExecutor driver_js= (JavascriptExecutor) driver;
        waitSecond(2);//等页面加载完毕。
        driver.findElement(By.id("username")).sendKeys("你的手机号");
        waitSecond(1);
        driver.findElement(By.id("pwd")).sendKeys("你的密码");
        waitSecond(1);
        driver.findElement(By.id("login-button")).click();
        //登陆完毕
        waitSecond(5);
        driver.get("http://www.miui.com/forum-773-1.html");
        waitSecond(2);
        driver.findElements(By.className("hd_di1")).get(0).findElement(By.tagName("a")).click();
        //再次点击一下登陆按钮,此时就已经正式登陆了。下面开始回帖。
        waitSecond(2);
        ArrayList last = new ArrayList();//记录访问过的帖子,防止一个帖子多次回复
        String now  = "";
        //几个热门论坛。分别是米8 ,miui10 mix2s 小米6 红米note5
        String [] boards = {"http://www.miui.com/forum-773-1.html",
                            "http://www.miui.com/forum-772-1.html",
                            "http://www.miui.com/forum-763-1.html",
                            "http://www.miui.com/forum-705-1.html",
                            "http://www.miui.com/forum-759-1.html"};

        //已经登陆完毕
        for(int i=0;i<1000;i++){
            try{
                driver.get(boards[(i)%5]);//按序查找论坛
                waitSecond(2);
                driver.findElement(By.id("nv_forum")).click();
                driver.findElement(By.id("nv_forum")).sendKeys("Keys.SPACE)");
                List list = driver.findElements(By.className("sub-tit"));
                //System.out.println(list.size());
                waitSecond(1);
                WebElement element = list.get(13).findElement(By.tagName("a"));
                now = element.getAttribute("href");
                if(last.contains(now)){
                    i--;
                    continue;
                }
                driver.get(now);
                waitSecond(2);
                driver_js.executeScript("window.scrollTo(0,document.body.scrollHeight)");//滑动到页面底部
                waitSecond(1);
                List list2 = driver.findElements(By.className("t_f"));
                String text = ""; //这是默认回复,现在已经去掉了。遇到帖子少的直接跳过。
                if(list2.size()>=3){
                    int indextemp = (int)((list2.size()*Math.random()));
                    text = list2.get(indextemp).getText(); // 随机找到第一页内的某个回复
                }else{
                    i--;
                    continue;//现在直接跳过,没有默认回复。
                }
                if(text.contains("积分")||
                        text.contains("内测")||
                        text.contains("暗话")||
                        text.contains("点赞")){
                    i--;
                    continue;
                }
                driver.findElement(By.id("fastpostmessage")).sendKeys(text);
                waitSecond(1);
                driver.findElement(By.id("fastpostsubmit")).click();
                System.out.println(i+"");
                last.add(now);
                waitSecond(20); //时间设置长了,因为miui论坛限制发帖每小时100个。这样的话每个小时就只有50个积分
            }catch (Exception e){
                continue;
            }
        }
    }

    private static void waitSecond ( int second ){
        try {
            Thread.sleep(second*1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        // Run main function to test your script.
        WebDriver driver = new ChromeDriver();
        try {
            test(driver);
        }
        catch(Exception e) { e.printStackTrace(); }
        finally {
            //driver.quit();
        }
    }

脚本实现很简单。

你可能感兴趣的:(2018-06-10)