use of com.hsn.epic4j.core.exception.ItemException in project epic4j by huisunan.
the class MainStart method receive.
@Override
@SneakyThrows
@Retry(message = "领取失败")
public List<Item> receive(Page page, List<Item> weekFreeItems) {
if (log.isDebugEnabled()) {
log.debug("所有免费的游戏:{}", weekFreeItems.stream().map(Item::getTitle).collect(Collectors.joining(",")));
}
List<Item> receiveItem = new ArrayList<>();
for (Item item : weekFreeItems) {
String url = getItemUrl(item);
String itemUrl = StrUtil.format(UrlConstants.storeUrl, url);
log.info("游戏url:{}", itemUrl);
page.goTo(itemUrl);
log.info("18+检测");
PageUtil.tryClick(page, itemUrl, 8, 1000, "div[data-component=PDPAgeGate] Button");
PageUtil.waitForTextChange(page, "div[data-component=DesktopSticky] button[data-testid=purchase-cta-button]", LOADING_TEXT);
if (isInLibrary(page)) {
log.debug("游戏[{}]已经在库里", item.getTitle());
continue;
}
page.waitForSelector("div[data-component=DesktopSticky] button[data-testid=purchase-cta-button]").click();
// page.waitForSelector("div[data-component=WithClickTracking] button").click();
// epic user licence check
log.info("首次领取游戏检测||设备检测");
PageUtil.tryClick(page, itemUrl, 30, 100, Arrays.asList(userLicenceCheck(), platformCheck()));
String purchaseUrl = PageUtil.getStrProperty(page, "#webPurchaseContainer iframe", "src");
log.debug("订单链接 :{}", purchaseUrl);
page.goTo(purchaseUrl);
PageUtil.tryClick(page, page.mainFrame().url(), 20, 500, "#purchase-app button[class*=confirm]:not([disabled])");
PageUtil.tryClick(page, page.mainFrame().url(), "#purchaseAppContainer div.payment-overlay button.payment-btn--primary");
PageUtil.findSelectors(page, 30_000, true, () -> {
throw new TimeException("订单状态检测超时");
}, new SelectItem("#purchase-app div[class*=alert]", () -> {
if (item.isDLC()) {
// DLC情况下,在没有本体的情况下也也可以领取
return SelectItem.SelectCallBack.CONTINUE;
} else {
String message = PageUtil.getStrProperty(page, "#purchase-app div[class*=alert]:not([disabled])", "textContent");
throw new PermissionException(message);
}
}), // talon_frame_checkout_free_prod
new SelectItem("#talon_container_checkout_free_prod[style*=visible]", () -> {
// 需要验证码
throw new PermissionException("检测到需要验证码");
}), new SelectItem("#purchase-app > div", (p, i) -> p.$(i.getSelectors()) == null, () -> {
// 当订单完成刷新时,该元素不存在,是订单完成后刷新到新页面
page.goTo(itemUrl);
PageUtil.waitForTextChange(page, "div[data-component=DesktopSticky] button[data-testid=purchase-cta-button]", LOADING_TEXT);
if (!isInLibrary(page)) {
throw new ItemException("该游戏被误认为已经认领");
}
log.info("游戏领取成功:{}", item.getTitle());
receiveItem.add(item);
return SelectItem.SelectCallBack.END;
}));
}
return receiveItem;
}
Aggregations