Bonjour. C'est merveilleux de dire que j'ai étudié l'anglais parce que mon anglais est faible. Dans mon cas, "je suis faible en anglais, alors j'ai pensé à un moyen d'échapper à l'anglais." C'est pourquoi je l'ai fait. (Brusque) ** Pour ceux qui veulent "copier le code source rapidement!" Ou qui recherchent une histoire technique [Il est temps pour une histoire technique](https://qiita.com/branch/items/5f5cf4be81980074431b#%E3 % 81% 9D% E3% 82% 8D% E3% 81% 9D% E3% 82% 8D% E6% 8A% 80% E8% A1% 93% E7% 9A% 84% E3% 81% AA% E8% A9 Veuillez aller à% B1)! ** ** ** Si vous êtes pressé, tant que vous disposez de win10 (64 bits), voici [Annexe: Simple installer (.bat)](https://qiita.com/branch/items/5f5cf4be81980074431b#%E4%BB%98% E9% 8C% B2win10-64bit% E7% 94% A8% E7% B0% A1% E6% 98% 93% E3% 82% A4% E3% 83% B3% E3% 82% B9% E3% 83% 88% Si vous utilisez E3% 83% BC% E3% 83% A9), vous pouvez l'installer en 10 minutes environ. ** **
Comme prérequis, Python 3.X doit être installé, donc référez-vous à Télécharger et installer Python 3.7.3 - Programmation de programmes. Veuillez essayer de le présenter. Bien sûr, il n'est pas nécessaire que ce soit la version 3.7.3, ni la dernière version.
Je communique avec des partenaires commerciaux étrangers en anglais. En d'autres termes, il existe relativement de nombreuses possibilités de communiquer en anglais, pas seulement par e-mail, mais que se passe-t-il si vous demandez à un homme qui ne parle pas anglais de communiquer en anglais? Oui, vous devez vous fier à la traduction de Google. Vous pourrez faire ce genre de chose.
1.Pensez au contenu en japonais
2.Lancer vers Google Traduction
3.Obtenez l'anglais
4.Retraduisez le texte anglais que vous avez obtenu sur Google
5.Examen du japonais retraduit
→ En cas de divergence entre le texte original et le sens, revenez à 1 et retravaillez le texte si nécessaire.
** N'est-ce pas impossible! ?? ** ** C'est vraiment agaçant. Non, je parle de devenir capable de parler anglais. Si vous n'êtes pas bon en anglais, vous n'avez pas d'autre choix que de faire ce travail. N'est-ce pas particulièrement vrai pour les personnes dans la quarantaine et la cinquantaine qui doivent soudainement utiliser l'anglais?
Peut-être parce que cela prend du temps, les heures supplémentaires du département sont censées être doerai, alors je l'ai fait.
Si vous commencez cette traduction avec l'entrée japonaise copiée dans le presse-papiers, elle sera divisée en phrases par "." ~~ A la fin de la phrase et traduite. ** Mise à jour le 3 août: le délimiteur a été remplacé par un saut. ** Lorsque la traduction est terminée, vous pouvez appuyer sur le bouton et copier l'anglais traduit dans le presse-papiers. Vous trouverez ci-dessous une capture d'écran des instructions et des préréglages d'essai au démarrage initial.
** Il a l'air complètement lie. ** Surtout les trois boutons du bas sont terribles. Je ne pouvais faire quelque chose comme ça parce que je n'avais pas assez de compétences techniques, J'ai conçu l'interface graphique avec wxpython pour la première fois, donc s'il vous plaît, pardonnez-moi Sai,
Merci d'être resté avec nous jusqu'à présent. Ci-dessous, nous présenterons le code d'introduction tout en montrant l'environnement.
win10 64bit ** python3.8.4 ** En supposant que le PATH de python est en place Seulement ça. Si vous utilisez la version 32 bits de win10, lisez-la bien et continuez avec l'introduction.
Installez un navigateur appelé Chromium dans cet environnement et installez un package pour le gérer.
Démarrez l'invite de commande et appuyez sur la commande suivante.
pip install chromedriver_binary==84.0.4147.30.0
pip install wxpython
pip install pyperclip
pip install selenium
pip install beautifulsoup4
Je pense que cela se terminera bientôt de manière inattendue.
[Site Web officiel de Chromium pour Win10 64 bits](https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Win_x64%2F768952%2Fchrome-win.zip?generation=1589490546798193&alt= DL à partir du support) et décompressez. Un dossier appelé «chrome-win» sera probablement créé, alors déplacez-le directement sous «C: \ Program Files». Si vous pouvez le déplacer, Chromium est prêt.
Si vous n'êtes pas Win10 64bit et que vous souhaitez télécharger à partir du référentiel officiel, veuillez vous assurer que la version Chromium est 84.0.4147.0
. À proprement parler, la version majeure devrait être 84, mais je n'ai pas confirmé l'opération, donc ...
Il s'agit d'un navigateur Web open source et constitue la base de Google Chrome, comme vous pouvez le voir sur l'icône ci-dessous. En outre, à partir de juillet 2020, Opera et Microsoft Edge sont également en cours de développement sur la base de Chromium.
-Wikipwdia Le nom du projet Chromium vient de l'élément métallique chrome (chrome en anglais), qui est connu pour être utilisé pour le placage de fer et autres. Puisque le métal chromé est appelé chrome en anglais, il est venu à ce nom dans le sens de "choses utilisées pour faire (Google) Chrome".
Cependant, dans la gamme d'utilisation quotidienne, cela ressemble presque à Google Chrome, et vous pouvez utiliser Chromium sans réfléchir profondément (du moins pour moi).
Les trois points suivants visent à choisir Chromium comme navigateur contrôlé au lieu de Google Chrome.
Tout d'abord, en ce qui concerne 1, il est gênant non seulement pour les navigateurs, mais également pour les applications qui ne disposent pas de mises à jour automatiques en raison de diverses restrictions, y compris des problèmes de sécurité. Cependant, dans cette application, c'est plutôt avantageux car il faut "faire correspondre la version principale du pilote et de l'application". De plus, cette fois, il démarre en mode sans tête, mais dans ce cas, l'utilisateur a tendance à le reconnaître comme "juste une application d'arrière-plan", donc Chromium ne se connecte pas intentionnellement au Web. En d'autres termes, il n'y a presque pas de souci de sécurité (bien sûr, ce n'est pas nul).
Concernant 2, ce translation-chan était à l'origine censé être déployé au sein du département, il y avait donc une possibilité que "des inconvénients surviennent si le navigateur que vous utilisez normalement est contrôlé". Je ne suis pas très doué pour les navigateurs, alors je voulais éviter IE, MS Edge, Google Chrome, FireFox, Opera et Sleipnir au cas où.
En ce qui concerne ** 3, honnêtement, c'est le plus gros développeur. ** Parce qu'il fonctionne avec le même pilote que Google Chrome, il a été facile à développer avec Google Chrome, à mettre en œuvre avec Chromium → tester dans une situation proche de l'environnement de production. Ça monte.
C'est pourquoi Chromium était si pratique.
C'est finalement le code source du corps principal. Traduisez le chrome installé ci-dessus avec le contrôle de Selenium.
import wx
import wx.lib.scrolledpanel
import pyperclip
import time
import urllib.parse
import chromedriver_binary
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
from time import sleep
class Translator: #Classe qui définit la traduction par le sélénium
def __init__(self):
self.options = Options()
self.options.binary_location = "C:\\Program Files\\chrome-win\\chrome.exe"
self.options.add_argument("--headless") #Commencez en mode sans tête
self.browser = webdriver.Chrome(options=self.options)
#self.browser.minimize_window() #Si le proxy est activé, réduisez-le.
self.browser.implicitly_wait(2)
def trans(self, txt , lg1 , lg2): #Fonction pour traduire de lg1 à lg2
if txt == "": #Renvoie vide si l'entrée est vide
return txt
#Accédez après avoir incorporé la phrase que vous souhaitez traduire dans l'URL
text_for_url = urllib.parse.quote_plus(txt, safe='')
url = "https://translate.google.co.jp/#{1}/{2}/{0}".format(text_for_url , lg1 , lg2)
self.browser.get(url)
#attends un peu
wait_time = len(txt) / 1000
if wait_time < 0.5:
wait_time = 0.5
time.sleep(wait_time)
#Extraire les résultats de la traduction
soup = BeautifulSoup(self.browser.page_source, "html.parser")
ret = soup.find(class_="tlid-translation translation")
return ret.text
def quit(self):
self.browser.quit()
def main():
#Obtenir le contenu du presse-papiers
orig = str(pyperclip.paste())
#Détecte les pauses et les divisions. À ce stade, les informations de saut de ligne"\r\n"Sera perdu
orignal_elements = orig.splitlines()
print(orignal_elements)
#Variable qui stocke les chaînes de caractères liées à la traduction
origs = []
en_txt = []
jp_txt = []
#Variable globale pour obtenir une ligne vide
global blank_row
blank_row = []
count = 0
while count < len(orignal_elements):
buf = orignal_elements[count] #" "Éliminez les éléments vides uniquement tels que
buf = buf.replace(" " , "") #Puisqu'il n'est pas possible de correspondre à une langue étrangère simplement en effaçant l'espace, faites la différence
if buf != "": #S'il n'est pas vide, ajoutez-le à la cible de traduction
origs.append(orignal_elements[count])
else:
blank_row.append(count) #S'il est vide, il s'agissait à l'origine d'une ligne vide, alors obtenez l'emplacement de l'élément avec int
count += 1
#Définir 2 langues à traduire[Langue maternelle,Une langue étrangère]Nous prévoyons de le construire afin que la langue puisse être sélectionnée à partir du menu déroulant à l'avenir.
global lg
lg = ["ja" , "en"]
#Définir deux langues pour la traduction inversée[Une langue étrangère,Japonais]
global rev_lg
rev_lg = list(reversed(lg))
#Préparation de l'interface graphique
app = wx.App()
#Affichage pendant le chargement
read_frame = wx.Frame(None, wx.ID_ANY, "En traduction...", size=(250,0))
read_frame.Centre() #Affiché au centre
read_frame.Show()
global rows
rows = len(origs) #Notez le nombre de lignes car len contient 0
for row in range(rows): #Traduire d'abord en fonction du texte d'origine
#Original
txt = origs[row]
#print("Original:",txt)
#Anglais
en_txt.append(translator.trans(origs[row], *lg))
#print("Anglais:",en_txt)
#Retraduction
jp_txt.append(translator.trans(en_txt[row], *rev_lg))
size = (900,600)
global frame
frame = wx.Frame(None, wx.ID_ANY, 'Traduction-chan', size=size)
panel = wx.lib.scrolledpanel.ScrolledPanel(frame,-1, size=size, pos=(0,28), style=wx.SIMPLE_BORDER)
panel.SetupScrolling()
panel.SetBackgroundColour('#AFAFAF')
global text
global en_text
global jp_text
global btn
layout = wx.FlexGridSizer(rows+1,4,0,0)
text = [""]*rows #Préparation du widget de texte d'origine
en_text = [""]*rows #Préparation du widget de texte anglais
jp_text = [""]*rows #Préparation du widget de traduction de texte
btn = [""]*rows #Préparation du widget du bouton de traduction
cellsize = (270,90)
for row in range(rows):
#Original
txt = origs[row]
text[row] = wx.TextCtrl(panel, row , txt, style = wx.TE_MULTILINE,size=cellsize)
#print("Original:",txt)
#Anglais
en_text[row] = wx.TextCtrl(panel, row , en_txt[row], style = wx.TE_MULTILINE,size=cellsize)
en_text[row].Disable() #Protégé en écriture
#print("Anglais:",en_txt)
#Retraduction
jp_text[row] = wx.TextCtrl(panel, row , jp_txt[row], style = wx.TE_MULTILINE,size=cellsize)
jp_text[row].Disable() #Protégé en écriture
#print("Retraduction:",jp_txt)
#Bouton Traduire
btn[row] = wx.Button(panel, row, "Traduction", size=(60, 40))
btn[row].Bind(wx.EVT_BUTTON, OnClickBtn) #Lier le bouton à l'événement
#Disposition des widgets
#layout.Add(text[row], flag=wx.ALIGN_LEFT | wx.GROW) #Original
layout.Add(text[row], flag=wx.SHAPED) #Original
layout.Add(jp_text[row], flag=wx.SHAPED) #Retraduction
layout.Add(en_text[row], flag=wx.SHAPED) #Anglais
layout.Add(btn[row],flag=wx.SHAPED |
wx.ALIGN_CENTER_VERTICAL | wx.TE_MULTILINE) #Bouton Traduire
copy_btn = wx.Button(panel, wx.ID_ANY, "Traduction terminée", size=(80, 40))
copy_btn.Bind(wx.EVT_BUTTON, OnClickCopyBtn)
layout.Add(copy_btn,flag=wx.SHAPED |
wx.ALIGN_CENTER_VERTICAL | wx.TE_MULTILINE)
retrans_btn = wx.Button(panel, wx.ID_ANY, "Réinitialiser chaque cellule et retraduire", size=(200, 40))
retrans_btn.Bind(wx.EVT_BUTTON, OnClickRetransBtn)
layout.Add(retrans_btn,flag=wx.SHAPED |
wx.ALIGN_CENTER_VERTICAL | wx.TE_MULTILINE)
exit_btn = wx.Button(panel, wx.ID_ANY, "Terminer la traduction", size=(120, 40))
exit_btn.Bind(wx.EVT_BUTTON, OnClickExitBtn)
layout.Add(exit_btn,flag=wx.SHAPED |
wx.ALIGN_CENTER_VERTICAL | wx.TE_MULTILINE)
#Placement des boutons
layout.AddGrowableCol(0, 3)
layout.AddGrowableCol(1, 3)
layout.AddGrowableCol(2, 3)
layout.AddGrowableCol(3, 1)
#Mise à jour de la mise en page
panel.SetSizer(layout)
#Définir la barre d'état
frame.CreateStatusBar()
frame.SetStatusText("Veuillez respecter l'obligation de confidentialité avant d'utiliser le service en ligne.")
read_frame.Close()
frame.Centre() #Affiché au centre
frame.Show()
app.MainLoop()
def OnClickBtn(event):
num = event.GetId()
btn[num].Disable()
n_txt = text[num].GetValue()
n_en_txt = translator.trans(n_txt, *lg)
n_jp_txt = translator.trans(n_en_txt, *rev_lg)
en_text[num].SetValue(n_en_txt)
jp_text[num].SetValue(n_jp_txt)
btn[num].Enable()
def copy_all(): #Une fonction qui copie le texte anglais du résultat de la traduction dans le presse-papiers
fin_txt = "" #Chaîne de caractères à copier dans le presse-papiers
fin_txts = [] #Une chaîne de caractères qui stocke le texte anglais traduit pour chaque cellule
for row in range(rows):
fin_txts.append(en_text[row].GetValue()+"\r\n") #Restaurer les informations de saut de ligne perdues avec la méthode des lignes fractionnées
for blank in blank_row:
fin_txts.insert(blank,"\r\n") #L'emplacement de la ligne vide est vide_Comme il est stocké en ligne, ajoutez une ligne vide
for element in fin_txts:
fin_txt += element #Puisque les informations de saut de ligne ont été restaurées, elles sont combinées en tant que chaîne de caractères de sortie.
return fin_txt
def OnClickCopyBtn(event): #Lorsque le bouton [Traduction terminée] est enfoncé
pyperclip.copy(copy_all())
def OnClickRetransBtn(event): #Lorsque le bouton [Réinitialiser chaque cellule et retranslate] est enfoncé
frame.Close()
main()
def OnClickExitBtn(event): #Lorsque le bouton [Quitter la traduction] est enfoncé
pyperclip.copy(copy_all())
frame.Close()
translator.quit()
if __name__ == "__main__":
translator=Translator()
main()
Enregistrez-le en tant que fichier de script python (.py) avec un nom approprié. Cliquez avec le bouton droit de la souris et exécutez-le pour démarrer Translation-chan. Essayez de commencer avec une copie du japonais approprié dans le presse-papiers.
Concernant le sélénium [Python] Mémo d'utilisation de Selenium (@ motoki1990) Toutes les opérations automatiques de Chrome avec Python + Selenium (@ mekakura),
Concernant l'utilisation de wxpthon Essayez d'utiliser wxPython (@ Kenta-Han),
Concernant la traduction automatique Automatiser la traduction de Google avec Selenium --Haruko Ameyomi,
J'ai fait référence à chacun. Je l'ai arrangé en combinaison, mais comme il s'agit d'un code créé par un travail urgent, je pense qu'il est structurellement étrange de différentes manières. Surtout la structure autour de la fonction principale est suspecte. N'est-ce pas suspect? À l'origine, il a été rendu principal en texte brut, il y a donc une partie qui a été rendue globale à la hâte pour que cela fonctionne. La partie étrange ici est que je suis encore un débutant, alors j'attends un professeur d'un expert.
Aussi, pour la personne merveilleuse qui fait une utilisation intensive de cette traduction, je vous dirai qu'il est possible de la démarrer avec une touche de raccourci (touche de raccourci). Veuillez essayer de le créer en vous référant ici. Vous n'avez pas besoin d'installer quoi que ce soit de nouveau à cet égard. Créer un raccourci pour le programme Python (Windows10)-@ Odanny
Dans les futures mises à jour, nous prévoyons de prendre en charge non seulement l'anglais mais également d'autres langues, nous allons donc procéder à l'apprentissage afin qu'il puisse être géré avec une seule fonction.
Enfin, je voudrais vous présenter un installeur simple. ** Assurez-vous de l'exécuter avec les privilèges d'administrateur **
@echo off
Vérifier le codage des caractères rem
chcp 65001
setlocal
start https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Win_x64%%2F768952%%2Fchrome-win.zip?generation=1589490546798193^&alt=media
Lorsque l'écho DL est terminé[Enter]appuyez sur la touche&& pause
Powershell -command "Expand-Archive -Path $env:USERPROFILE\Downloads\Win_x64_768952_chrome-win.zip -DestinationPath C:\Program` Files"
del %USERPROFILE%\Downloads\Win_x64_768952_chrome-win.zip
py -m pip install chromedriver_binary==84.0.4147.30.0
py -m pip install wxpython
py -m pip install pyperclip
py -m pip install selenium
py -m pip install beautifulsoup4
endlocal
exit
Tout va bien, alors enregistrez-le en tant que fichier batch (.bat) et exécutez-le avec ** les privilèges d'administrateur. ** **
Cette traduction manque beaucoup de fonctions. Pour l'instant, nous prévoyons de mettre en œuvre les fonctions suivantes.
C'est un article très utile que j'ai visité plusieurs fois. Nous aimerions profiter de cette occasion pour vous remercier. De plus, s'il y a un problème avec cet article, nous le supprimerons immédiatement.
・ [Python] Mémo d'utilisation du sélénium-@ motoki1990 ・ Toutes les opérations automatiques de Chrome avec Python + Selenium-@ mekakura ・ Essayez d'utiliser wxPython-@ Kenta-Han ・ Automatisation de la traduction Google avec Selenium --Haruko Ameyomi
Ce n'est pas grave si vous le copiez, alors j'espère que diverses personnes seront intéressées par Python.
7/29
Mettre à jour le code source
・ Accélération de l'opération ・ Prend en charge la conservation des informations de saut de ligne → Modifier le délimiteur en conséquence (ponctuation → saut de ligne) Cela a été reflété dans le code source.
Depuis que j'ai changé les spécifications, j'ai mis à jour l'image de Translate-chan (une image comme une lie).