import { langCode, langCodeWithAuto } from '@translate-tools/core/types/Translator';
import { Page } from 'puppeteer-extra-plugin/dist/puppeteer';
import { Browcore } from './Browcore';
import { HybridTranslate } from './HybridTranslate';
export class HybridTranslateDeFa extends HybridTranslate {
protected transGooglePage!: Page;
async init(){
const browCore = new Browcore();
await browCore.init();
this.browCore = browCore;
}
async prepare(){
await this.init();
this.browCore.headless = true;
this.transGooglePage = await this.browCore.browser.newPage();
await this.browCore.loadCookiesForPage(this.transGooglePage, "google-trans-cookie-de-fa.json");
await this.transGooglePage.goto("https://translate.google.com/", {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);
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
}
}