前几天买了小米8,但是出厂版本是miui9 ,升级到miui10暂时只有内测组玩家才行。积分回复一天限制50贴,每帖两个积分,但是亲测如果超过50贴的话,每个帖子0.5个积分。所以刷帖还是可行的。自行刷论坛积分太累了。于是写了个脚本。具体思路是:找到论坛里最新回复里面的某个帖子,然后在帖子里复制某个用户的评论,发表出来,如果没有评论过的话,就回复固定的:mark一下之类的这样的回答。
(2018-6-12更新,这样的默认回复已经被论坛删除,还有选取的一些刷积分的回复被直接copy过来也被论坛删除了。所以对脚本进行了一点更新。我已经放在下面。6-11已进内测,祝大家玩的开心。)
(2018-06-13更新,在米8论坛看到好多用这个脚本刷的回复。感觉离被封不远了,因为之前选定的回复是默认第一页最后一个回复。现在做了做修改。改成随机了。希望这样的回复看上去更正常一些吧!)
需要环境:
Java,
Chrome
具体过程:
0. Java的配置
百度教程很多。
1. 配置chrome-driver
1.下载chromedriver,http://chromedriver.storage.googleapis.com/index.html?path=2.36/
Mac OS: 将chromedriver复制到/User/local/bin文件夹
Windows: 配置chromedriver的文件夹路径到环境变量Path
2.安装selenium
下载selenium,http://selenium‐release.storage.googleapis.com/3.9/selenium‐server‐standalone‐3.9.1.jar
将下载的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<String> last = new ArrayList<String>();//记录访问过的帖子,防止一个帖子多次回复
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<WebElement> 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<WebElement> 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();
}
}
脚本实现很简单。