"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.HybridTranslate = void 0;
const GoogleTranslator_1 = require("@translate-tools/core/translators/GoogleTranslator");
const Browcore_1 = require("./Browcore");
class HybridTranslate {
constructor() {
this.googleTranslator = new GoogleTranslator_1.GoogleTranslator();
}
async init() {
this.browCore = await this.getBrowCore();
}
newPage() {
return this.browCore.browser.newPage();
}
async getBrowCore() {
if (HybridTranslate.browCoreStatic) {
return HybridTranslate.browCoreStatic;
}
else {
HybridTranslate.browCoreStatic = new Browcore_1.Browcore();
await HybridTranslate.browCoreStatic.init();
return HybridTranslate.browCoreStatic;
}
}
async prepare() {
await this.init();
this.browCore.headless = true;
this.transGooglePage = await this.browCore.browser.newPage();
this.deelPage = await this.browCore.browser.newPage();
await this.browCore.loadCookiesForPage(this.transGooglePage, "google-trans-cookie.json");
await this.transGooglePage.goto("https://translate.google.com/", { waitUntil: 'networkidle0' });
await this.deelPage.goto("https://www.deepl.com/translator", { waitUntil: 'networkidle0' });
await this.transGooglePage.waitForTimeout(2000);
}
async translate(text, sourceLang, targetLang) {
await this.resetTranslation();
let result = await this.translateViaGoogle(text, sourceLang, targetLang);
result = await this.translateViaDeepl(result, "en", "de-DE");
return result;
}
async setTextInputValue(page, selector, value) {
await page.waitForSelector(selector);
await page.evaluate((data) => {
return document.querySelector(data.selector).value = data.value;
}, { selector, value });
}
async translateViaGoogle(text, sourceLang, targetLang) {
const textArea = await this.transGooglePage.$(".er8xn");
// await textArea?.type(text);
await this.setTextInputValue(this.transGooglePage, ".er8xn", text);
await (textArea === null || textArea === void 0 ? void 0 : textArea.type(" "));
await this.transGooglePage.waitForTimeout(1000);
let value = await this.transGooglePage.evaluate(() => {
const elements = document.querySelectorAll(".VIiyi span > span");
value = "";
elements.forEach(el => {
value += el.textContent;
});
return value;
});
return value;
}
async resetTranslation() {
await this.resetGoogleTranslate();
}
async resetGoogleTranslate() {
await this.transGooglePage.focus(".er8xn");
await this.transGooglePage.keyboard.down('Control');
await this.transGooglePage.keyboard.press('A');
await this.transGooglePage.keyboard.up('Control');
await this.transGooglePage.keyboard.press('Backspace');
}
async resetDeeplByPage(page) {
// const textArea = await this.page.$(".lmt__source_textarea")
// console.log("text area", textArea)
// await textArea?.evaluate((el)=>{
// el.nodeValue = "";
// })
await page.focus(".lmt__source_textarea");
await page.keyboard.down('Control');
await page.keyboard.press('A');
await page.keyboard.up('Control');
await page.keyboard.press('Backspace');
// const gtextArea = await this.transGooglePage.$(".er8xn")
}
async resetDeepl() {
this.resetDeeplByPage(this.deelPage);
}
async translateViaDeepl(text, sourceLang, targetLang) {
// return new Promise(async (resolve, reject)=>{
await this.resetDeepl();
return await this.translateViaDeeplByPage(text, this.deelPage);
}
async translateViaDeeplByPage(text, page) {
// return new Promise(async (resolve, reject)=>{
await this.resetDeeplByPage(page);
// await textArea?.type(text);
// await textArea?.click();
// await textArea?.focus();
await this.setTextInputValue(page, ".lmt__source_textarea", text);
await page.bringToFront();
const textArea = await page.$(".lmt__source_textarea");
await (textArea === null || textArea === void 0 ? void 0 : textArea.focus());
await (textArea === null || textArea === void 0 ? void 0 : textArea.click());
await (textArea === null || textArea === void 0 ? void 0 : textArea.type(" "));
await page.waitForTimeout(1000);
const resElement = await page.$("#target-dummydiv");
let value = await page.evaluate((el) => el.textContent, resElement);
// resolve(value)
return value;
// })
}
async translateToImprove(text, sourceLang, targetLang) {
// return new Promise(async (resolve, reject)=>{
await this.resetDeepl();
const textArea = await this.deelPage.$(".lmt__source_textarea");
// await textArea?.type(text);
await this.setTextInputValue(this.deelPage, ".lmt__source_textarea", text);
await (textArea === null || textArea === void 0 ? void 0 : textArea.type(" "));
await this.deelPage.waitForTimeout(1000);
const switchBtn = await this.deelPage.$("div.lmt__language_container_switch");
await this.deelPage.screenshot({ path: "what.jpg" });
await (switchBtn === null || switchBtn === void 0 ? void 0 : switchBtn.click());
await this.deelPage.hover('div.lmt__language_container_switch');
await this.deelPage.waitForTimeout(1000);
const resElement = await this.deelPage.$("#target-dummydiv");
let value = await this.deelPage.evaluate((el) => el.textContent, resElement);
await this.deelPage.hover('.lmt__language_container_switch');
const switchBtn2 = await this.deelPage.$("div.lmt__language_container_switch");
// await switchBtn2?.click();
// resolve(value)
return value;
// })
}
}
exports.HybridTranslate = HybridTranslate;