import { GoogleTranslator } from '@translate-tools/core/translators/GoogleTranslator';
import { langCode, langCodeWithAuto } from '@translate-tools/core/types/Translator';
import { Page } from 'puppeteer-extra-plugin/dist/puppeteer';
import { HybridTranslate } from './HybridTranslate';
export class HybridTranslateFaDe extends HybridTranslate {
protected googleTranslator: GoogleTranslator = new GoogleTranslator();
protected transGooglePage!: Page;
protected transGooglePageDeFa!: Page;
protected deelPage!: Page;
async prepare(){
await this.init();
this.browCore.headless = true;
this.deelPage = this.browCore.page;
this.transGooglePage = 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.browCore.page.goto("https://www.deepl.com/translator", {waitUntil: 'networkidle0'})
await this.transGooglePage.waitForTimeout(2000)
}
async translate(text: string, sourceLang: langCodeWithAuto, targetLang: langCode): Promise<string> {
await this.resetTranslation();
let result = await this.translateViaGoogle(text, sourceLang, targetLang);
result = await this.translateViaDeepl(result, "en", "de-DE");
return result;
}
async setTextInputValue (page: Page, selector: string, value: string | number) {
await page.waitForSelector(selector);
await page.evaluate((data: { selector: any; value: any; }) => {
return document.querySelector(data.selector).value = data.value
}, {selector, value})
}
async translateViaGoogle(text: string, sourceLang: string, targetLang: string): Promise<string> {
const textArea = await this.transGooglePage.$(".er8xn")
// await textArea?.type(text);
await this.setTextInputValue(this.transGooglePage, ".er8xn", text)
await textArea?.type(" ");
await this.transGooglePage.waitForTimeout(1000)
let value: string = await this.transGooglePage.evaluate(()=>{
const elements = document.querySelectorAll(".VIiyi span > span")
value = "";
elements.forEach(el=>{
value+=el.textContent
})
return value
})
return value
}
async translateViaDeFaGoogle(text: string, sourceLang: string, targetLang: string): Promise<string> {
const textArea = await this.transGooglePageDeFa.$(".er8xn")
// await textArea?.type(text);
await this.setTextInputValue(this.transGooglePageDeFa, ".er8xn", text)
await textArea?.type(" ");
await this.transGooglePageDeFa.waitForTimeout(1000)
let value: string = await this.transGooglePageDeFa.evaluate(()=>{
const elements = document.querySelectorAll(".VIiyi span > span")
value = "";
elements.forEach(el=>{
value+=el.textContent
})
return value
})
return value
}
}