Search in sources :

Example 1 with INotify

use of com.hsn.epic4j.core.notify.INotify in project epic4j by huisunan.

the class EpicStarter method doStart.

public void doStart(UserInfo userInfo, List<Item> weekFreeItems) {
    Browser browser = null;
    WatchDogThread watchDogThread = null;
    try {
        ThreadContext.init(epicConfig.getTimeout(), epicConfig.getInterval());
        String desensitizedEmail = email(userInfo.getEmail());
        log.info("账号[{}]开始工作", desensitizedEmail);
        // 用户文件路径
        String userDataPath = new FileUrlResource(epicConfig.getDataPath() + File.separator + userInfo.getEmail()).getFile().getAbsolutePath();
        log.debug("用户数据目录:{}", userDataPath.replace(userInfo.getEmail(), desensitizedEmail));
        // 获取浏览器对象
        browser = iStart.getBrowser(userDataPath);
        // 获取默认page
        Page page = iStart.getDefaultPage(browser);
        // 加载cookie
        if (StrUtil.isNotBlank(epicConfig.getCookiePath()) && FileUtil.exist(epicConfig.getCookiePath())) {
            log.debug("加载cookie");
            List<CookieParam> cookies = JSONUtil.toBean(IoUtil.read(new FileReader(epicConfig.getCookiePath())), new TypeReference<List<CookieParam>>() {
            }, false);
            page.setCookie(cookies);
        }
        // 反爬虫设置
        PageUtil.crawSet(page);
        watchDogThread = new WatchDogThread(browser, Thread.currentThread(), epicConfig.getHeadLess());
        watchDogThread.start();
        // 打开epic主页
        iStart.goToEpic(page);
        List<Page> pages = browser.pages();
        for (Page p : pages) {
            if (!StrUtil.startWith(p.mainFrame().url(), "http")) {
                p.close();
            }
        }
        boolean needLogin = iStart.needLogin(page);
        log.debug("是否需要登录:{}", needLogin ? "是" : "否");
        if (needLogin) {
            iLogin.login(page, userInfo.getEmail(), userInfo.getPassword());
        }
        // 领取游戏
        List<Item> receive = iStart.receive(page, weekFreeItems);
        for (INotify notify : notifies) {
            if (notify.notifyReceive(receive)) {
                break;
            }
        }
    } catch (Exception e) {
        if (epicConfig.getErrorScreenShoot()) {
            // 输出截图和html信息
            long currentTimeMillis = System.currentTimeMillis();
            ScreenShootUtil.screen(browser, "data/error", currentTimeMillis + ".jpeg", currentTimeMillis + ".html");
        }
        log.error("程序异常", e);
    } finally {
        if (watchDogThread != null) {
            watchDogThread.interrupt();
        }
        if (browser != null) {
            browser.close();
        }
        ThreadContext.clear();
    }
}
Also used : INotify(com.hsn.epic4j.core.notify.INotify) Page(com.ruiyun.jvppeteer.core.page.Page) CookieParam(com.ruiyun.jvppeteer.protocol.network.CookieParam) Item(com.hsn.epic4j.core.bean.Item) FileReader(java.io.FileReader) ArrayList(java.util.ArrayList) List(java.util.List) FileUrlResource(org.springframework.core.io.FileUrlResource) Browser(com.ruiyun.jvppeteer.core.browser.Browser)

Aggregations

Item (com.hsn.epic4j.core.bean.Item)1 INotify (com.hsn.epic4j.core.notify.INotify)1 Browser (com.ruiyun.jvppeteer.core.browser.Browser)1 Page (com.ruiyun.jvppeteer.core.page.Page)1 CookieParam (com.ruiyun.jvppeteer.protocol.network.CookieParam)1 FileReader (java.io.FileReader)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 FileUrlResource (org.springframework.core.io.FileUrlResource)1