java模拟登陆京东_java 京东登录

JdLoginBot是一个Java模拟京东登录的类,利用AwtBot进行图像识别点击,并通过HttpProxyServer设置代理来监听登录请求。登录过程中,类会等待特定登录URL出现并返回登录密钥。
摘要由CSDN通过智能技术生成

packageorg.rx.service.media;importio.netty.channel.Channel;importio.netty.handler.codec.http.HttpHeaderNames;importio.netty.handler.codec.http.HttpRequest;importio.netty.handler.codec.http.HttpResponse;importlombok.SneakyThrows;importlombok.extern.slf4j.Slf4j;importorg.rx.core.util.ImageUtil;importorg.rx.bot.util.AwtBot;importorg.rx.common.Disposable;importorg.rx.common.InvalidOperationException;importorg.rx.socks.http.HttpClient;importorg.rx.socks.proxyee.intercept.HttpProxyIntercept;importorg.rx.socks.proxyee.intercept.HttpProxyInterceptInitializer;importorg.rx.socks.proxyee.intercept.HttpProxyInterceptPipeline;importorg.rx.socks.proxyee.server.HttpProxyServer;importorg.rx.socks.proxyee.server.HttpProxyServerConfig;importorg.rx.util.ManualResetEvent;import java.awt.*;importjava.awt.image.BufferedImage;import staticorg.rx.util.AsyncTask.TaskFactory;/*** helper = new JdLoginBot(config.getJd().getLoginPort());

* while (caller.getCurrentUrl().equals(loginUrl)) {

* try {

* String key = helper.produceKey();

* log.info("produce key {}", key);

* caller.navigateUrl(key, BodySelector);

* log.info("consume key {}", caller.getCurrentUrl());

*

* Thread.sleep(2000);

* } catch (Exception e) {

* log.error("login", e);

* }

* }*/@Deprecated

@Slf4jpublic final class JdLoginBot extendsDisposable {private static finalBufferedImage jdKey;static{

Class owner= JdLoginBot.class;

jdKey= ImageUtil.getImageFromResource(owner, "/bot/jdKey.png");

}privateString loginKey;privateManualResetEvent waiter;privateAwtBot bot;privatePoint lastPoint;privateHttpProxyServer proxyServer;public JdLoginBot(intport) {

waiter= newManualResetEvent();

bot=AwtBot.getBot();

TaskFactory.run(()->listen(port));

}

@Overrideprotected voidfreeObjects() {

proxyServer.close();

}private void listen(intport) {

HttpProxyServerConfig config= newHttpProxyServerConfig();

config.setHandleSsl(true);

proxyServer= newHttpProxyServer().serverConfig(config)

.proxyInterceptInitializer(newHttpProxyInterceptInitializer() {

@Overridepublic voidinit(HttpProxyInterceptPipeline pipeline) {

pipeline.addLast(newHttpProxyIntercept() {

@Overridepublic void beforeRequest(Channel clientChannel, HttpRequest httpRequest, HttpProxyInterceptPipeline pipeline) throwsException {

String host=httpRequest.headers().get(HttpHeaderNames.HOST);

String s=httpRequest.headers().get(HttpHeaderNames.COOKIE);

System.out.println("[rxcookie]: " +s);if (host != null) {

String url;if (httpRequest.uri().indexOf("/") == 0) {if (httpRequest.uri().length() > 1) {

url= host +httpRequest.uri();

}else{

url=host;

}

}else{

url=httpRequest.uri();

}

log.info("Request: {}", url);if (url.startsWith("passport.jd.com/uc/nplogin?")) {

log.info("JdLoginBot detect {}", url);

loginKey= "http://" +url;

waiter.set();

Thread.sleep(3000);

clientChannel.close();return;

}

}

httpRequest.headers().set(HttpHeaderNames.USER_AGENT, HttpClient.IE_UserAgent);

pipeline.beforeRequest(clientChannel, httpRequest);

}

@Overridepublic void afterResponse(Channel clientChannel, Channel proxyChannel, HttpResponse httpResponse, HttpProxyInterceptPipeline pipeline) throwsException {

httpResponse.headers().add("intercept", "rxProxy");

pipeline.afterResponse(clientChannel, proxyChannel, httpResponse);

}

});

}

});

proxyServer.start(port);

}

@SneakyThrowspublic synchronizedString produceKey() {try{

lastPoint=bot.clickByImage(jdKey);

log.info("step1 clickByImage ok");

}catch(InvalidOperationException e) {if (lastPoint != null) {

bot.mouseLeftClick(lastPoint);

log.info("step1 retry clickByImage {} ok", lastPoint);

}else{throwe;

}

}

waiter.waitOne(6 * 1000);

waiter.reset();

log.info("step2 wait proxy callback");try{

log.info("step2 get key {}", loginKey);if (loginKey == null) {throw new InvalidOperationException("produce empty key");

}returnloginKey;

}finally{

loginKey= null;

TaskFactory.scheduleOnce(()->{

log.info("step3 try close it");//bot.saveScreen();

int y = (int) bot.getScreenRectangle().getHeight();

bot.clickAndAltF4(218, y - 20);

log.info("step3 closed it");

},2 * 1000);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值