CoderCastrov logo
CoderCastrov
Selenium

Как создать автоматизацию, используя Google Translate для перевода текстов на Python с помощью Selenium.

Как создать автоматизацию, используя Google Translate для перевода текстов на Python с помощью Selenium.
просмотров
4 мин чтение
#Selenium

Приветствую уважаемого читателя! Сегодня я хотел бы поделиться с вами, как я использую Python и библиотеку Selenium для создания автоматизации (или, как я люблю называть, робота), который переводит фразы с помощью Google Translate.

Почему я создал этого робота?

Я являюсь студентом в области машинного обучения в целом, и во время изучения обработки естественного языка, применяемого к описанию футбольных матчей, у меня возникла потребность определить подлежащего в предложении.

Я провел несколько тестов и выяснил, что перевод фраз на английский язык и использование NLTK для анализа работает так, что удовлетворяет моим потребностям. Теперь возникала проблема: мне нужно было перевести примерно 1500 фраз, и делать это вручную становилось утомительно. Поэтому я решил создать робота, который сделает это за меня.

Пакет Selenium.

Selenium - это пакет, созданный для автоматизации веб-браузеров. Мне нравится объяснять, что Selenium имитирует человеческое поведение на веб-сайте, он не только парсит информацию из HTML, как некоторые другие известные библиотеки для парсинга веб-страниц, но также может нажимать кнопки, кликать по ссылкам, прокручивать страницу и многое другое.

Если вы хотите получить более подробное объяснение того, что такое Selenium, вы можете посетить их официальный сайт по этой ссылке (https://www.selenium.dev/documentation/en/).

Давайте взглянем на страницу.

Ну, первый шаг для этого проекта - изучить страницу Google Translate.

Наша задача по созданию может быть разделена на несколько частей:

  • Ввести фразу на португальском языке в левое поле (мне не нужно нажимать на кнопку "португальский", потому что она автоматически определит его).
  • Мне нужно нажать на кнопку "АНГЛИЙСКИЙ" над правым полем, чтобы перевести фразу на английский язык.
  • Наконец, мне нужно получить перевод и сохранить его.

Для этого мне нужно найти ссылки на левое и правое поля, а также на кнопку "АНГЛИЙСКИЙ". Способ, который я знаю, - навести указатель мыши на элемент, щелкнуть правой кнопкой мыши и использовать "Инспектировать элемент".

С нашим планом в руках и всеми идентифицированными элементами, давайте начнем писать наш код.

В этой первой части я делаю импорты (Я предпочитаю объяснять импорты по мере их использования).

Я создал функцию "ОткрытьFirefox", которая принимает параметр "headless". Когда этот параметр является ложным, он использует версию, которая фактически открывает Firefox на вашем компьютере, и вы можете видеть все происходящее.

В режиме "headless" он не открывает Firefox визуально для вас. Чтобы сделать это, вам нужно передать параметр "--headless" в Firefox, а затем в экземпляр вашего веб-браузера, который является ничем иным, как веб-драйвером, который мы импортировали.

Совет, который я узнал, после того как несколько раз заблокировал компьютер, всегда создавайте экземпляр браузера в отдельной функции от остальной части кода, чтобы вы могли закрыть его в случае проблемы и не открывать сотни браузеров на вашем компьютере.

Функция "ПеревестиТекст" принимает текст на португальском языке и браузер (веб-драйвер) в качестве параметров.

WebDriverWait работает как таймер, и если браузер не выполняет действие в течение 30 секунд, он возвращает ошибку. "until" - это то, что мы ожидаем, что браузер найдет. В данном случае я использую "expected_conditions", а именно "presence_of_element_located", который ожидает найти тег в HTML. В качестве параметра для функции "presence_of_element_located" мы передаем кортеж с "BY.CLASS_NAME", который указывает, как мы будем находить тег в HTML, и тег, который мы ищем.

Если это вызвало путаницу или вы хотите узнать больше, вот документация по "expected_conditions" (https://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html).

После ожидания мы находим поле слева (где мы хотим ввести текст на португальском языке). Этот объект Selenium будет храниться в переменной "campo_busca", а затем мы используем "send_keys" для ввода текста в левое поле.

То же самое происходит с кнопкой, мы используем WebDriverWait, чтобы убедиться, что кнопка будет там, затем мы находим ее и сохраняем в переменной, а затем используем ".click()", чтобы буквально нажать на кнопку.

Наконец, мы ждем появления переведенного текста с помощью WebDriverWait, и когда он появляется, мы находим его и сохраняем в переменной "resultado". Но этот объект, который мы ожидаем, является частью HTML, содержащей текст, который мы хотим, поэтому теперь вместо "firefox.find_element_by_class_name" мы используем найденный объект и ищем тег "span" внутри "resultado".

Обратите внимание, что мы используем "resultado.find_elements_by_tag_name", во множественном числе, поэтому он найдет все теги "span" внутри тега с классом "J0lOec". Из опыта я знаю, что перевод всегда является третьим элементом в списке.

Ну, после этого я просто импортировал файл csv с помощью pandas и проитерировался по фразам, которые содержались в этом csv-файле.

Как я уже сказал, я все еще учусь, и надеюсь, что смог помочь. Если вы опытный пользователь Selenium и у вас есть советы по улучшению моего кода, пожалуйста, оставьте комментарий.