Перейти к содержимому

Инженер по тестированию программного обеспечения
онлайн, начало 8 декабря
Комплексная система подготовки тестировщиков по программе ISTQB FL
онлайн, начало 5 декабря
Программирование на Java для тестировщиков
онлайн, начало 9 декабря
SQL для тестировщиков
онлайн, начало 5 декабря
Фотография

Переключение языков в Chrome headless Selenium Python


  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1 Front

Front

    Новый участник

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Волокитин Сергей

Отправлено 12 ноября 2022 - 21:51

Добрый день
 

Прошу помочь мне разобраться как Selenium переключает язык в браузере (на примере Chrome). Я работаю через удаленные терминал на Linux в режиме headless (без запуска самого браузера при тестах). 

Я написал простой скрипт (представлен ниже), который пытается задать язык es для браузера Chrome и с этой настройкой идет на www.google.com.

После этого я проверяю текущий язык страницы через JavaScript и через атрибут lang тега html.

 

В итоге, я ожидаю, что получу результат es, а получаю от JavaScript — en-US, а атрибут lang выдает ru

 

Что я делаю не так?   

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

language = 'es'

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--start-maximized")
chrome_options.add_argument("--disable-dev-shm-usage")

chrome_options.add_experimental_option("prefs", {'intl.accept_languages': language})

browser = webdriver.Chrome(options=chrome_options)

print("Selenium.webdriver:\t", webdriver.__version__)
print("browserVersion:\t\t", browser.capabilities['browserVersion'])
print("chromedriverVersion:\t", browser.capabilities['chrome']['chromedriverVersion'].split(' ')[0])
print("-----------\n")

browser.get("https://www.google.com/")

print("URL:\t",browser.current_url, "\nTitle:\t", browser.title)
print("My lang:\t", language)
print("JS lang:\t", browser.execute_script("return window.navigator.userLanguage || window.navigator.language"))
print("HTML lang:\t", browser.find_element(By.TAG_NAME, "html").get_attribute('lang'))

browser.quit()
Результат исполнения скрипта:
 
Selenium.webdriver:      4.5.0
browserVersion:          107.0.5304.87
chromedriverVersion:     107.0.5304.87
-----------

URL:     https://www.google.com/
Title:   Google
My lang:         es
JS lang:         en-US
HTML lang:       ru
 
 
 

 


  • 0

#2 Front

Front

    Новый участник

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Волокитин Сергей

Отправлено 13 ноября 2022 - 23:30

В итоге мне удалось самому решить свою проблему ))

Дело в том, что мой стенд с Selenium расположен на виртуальной машине в Яндекс.Облаке и, вероятно, там происходят какие-то блокировки, если система чувствует, что кто-то на ней запускает ботов. Проблема решается, если настроить Chrome.webdriver как можно более похожим на обычный браузер.

Для этого я использовал библиотеку  selenium_stealth 

Вот код (модифицированный предыдущий), который корректно отрабатывает языковые настройки.

from selenium_stealth import stealth
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

language = 'es'

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")

browser = webdriver.Chrome(options=chrome_options)

stealth(browser,
        languages=[language,"en"],
        vendor="Google Inc.",
        platform="Win32",
        )

print("Selenium_stealth: \t1.0.6.")
print("Selenium.webdriver:\t", webdriver.__version__)
print("browserVersion:\t\t", browser.capabilities['browserVersion'])
print("chromedriverVersion:\t", browser.capabilities['chrome']['chromedriverVersion'].split(' ')[0])
print("-----------\n")

browser.get("https://www.google.com/")

print("URL:\t",browser.current_url, "\nTitle:\t", browser.title)
print("My lang:\t", language)
print("JS lang:\t", browser.execute_script("return window.navigator.userLanguage || window.navigator.language"))
print("HTML lang:\t", browser.find_element(By.TAG_NAME, "html").get_attribute('lang'))

browser.quit()

Результат исполнения скрипта:

Selenium_stealth:       1.0.6.
Selenium.webdriver:      4.5.0
browserVersion:          107.0.5304.87
chromedriverVersion:     107.0.5304.87
-----------

URL:     https://www.google.com/
Title:   Google
My lang:         es
JS lang:         es
HTML lang:       es-419

 

 


  • 1


Selenium 2.0: стартовый уровень
онлайн
Программирование на Java для тестировщиков
онлайн
Автоматизация функционального тестирования
онлайн
Selenium WebDriver: полное руководство
онлайн



Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

Яндекс.Метрика
Реклама на портале