Как запустить веб-сайт в безголовом режиме Chrome, который блокирует безголовый режим?

#css #python-3.x #selenium #xpath #scrape

#css — код #python-3.x #селен #xpath #очистить

Вопрос:

Пожалуйста, найдите ниже XPATH, который я использую, чтобы узнать цену с сайта Myntra. Я могу получить доступ ко всем другим сайтам, кроме Myntra, и то же самое ниже XPATH работает в моей локальной системе Windows с Selenium, версией Python3 и с использованием драйвера Chrome.

Путь к драйверу : driver = webdriver.Chrome("/usr/lib/chromium-browser/chromedriver", options=chrome_options);

имя_переменной = driver.find_element_by_xpath('//*[@id="mountRoot"]/div/div/div/main/div[2]/div[2]/div[1]/p[1]/span/strong').text

ссылка для справки: https://www.myntra.com/beauty-gift-set/kama-ayurveda/kama-ayurveda-round-the-clock-skincare-gift-set/12800176/buy

При размещении на компьютере EC2 ubuntu появляется ошибка ниже: Сообщение: нет такого элемента: невозможно найти элемент: {«метод»:»xpath»,»селектор»:»// * [@id =»mountRoot»]/ div / div / div /main /div[2]/div[2] / div [1]/p[1]/span/strong»}

Попробовал изменить XPATH, driver.find_element_by_xpath('//*[@class="pdp-price"]//*').text но безуспешно.

Комментарии:

1. Он хорошо работал на Mac Catalina. Кстати, Xpath может скоро сломаться. Вы можете использовать лучшие, более короткие и устойчивые XPaths. Также CSS span.pdp-price> strong намного лучше.

Ответ №1:

Используйте приведенный ниже XPath

 driver.find_element_by_xpath('//span[@class="pdp-price"]//strong').text
 

Или с помощью приведенного ниже селектора CSS

 driver.find_element_by_css_selector('.pdp-price strong').text
 

Вышеуказанное работает, только если сайт находится в режиме GUI, тогда как для безголовых дисплеев доступ запрещен, прикрепленный ниже скриншот для справки. Поскольку приложение блокирует безголовый режим

введите описание изображения здесь

Добавьте приведенный ниже аргумент user agent и загрузите веб-драйвер в параметры драйвера Chrome

 chrome_options.add_argument('--no-sandbox') 
chrome_options.add_argument("--headless")
chrome_options.add_argument(f'user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36')
 

Комментарии:

1. ошибка ниже: Сообщение: нет такого элемента: не удается найти элемент: {«метод»: «селектор css»,»селектор»:».pdp-цена сильная»} (Информация о сеансе: безголовый chrome = 87.0.4280.66)

2. странная вещь работает локально, если мы используем CSS и XPATH . Цена, которую я получаю: . 1050 (с префиксом точки). Что-то с версией проблемы в экземпляре EC2?

3. Сайт @Sharath блокирует безголовый режим попробуйте напечатать заголовок в безголовом режиме и режиме графического интерфейса. В безголовом режиме заголовок отображается как доступ запрещен, тогда как в режиме GUI печатается соответствующий заголовок попробуйте

4. @Mohammed есть ли какой-нибудь способ извлечь цену в безголовом режиме. Необходимо автоматизировать это на ежедневной основе на сервере EC2. Используя приведенные ниже аргументы для справки: chrome_options.add_argument('--no-sandbox') chrome_options.add_argument("--headless") chrome_options.add_argument("--incognito")

5. @Sharath Обратитесь к обновленному ответу и попробуйте.

Ответ №2:

Просто добавьте эту опцию user-agent при запуске безголового Chrome: —user-agent=»Mozilla /5.0 (X11; Linux x86_64) AppleWebKit /537.36 (KHTML, как Gecko) Chrome / 91.0.4472.114 Safari /537.36″

 chromeLauncher.launch({
    chromeFlags: ["--headless", '--disable-gpu', `--user-agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"`],
    chromePath: '/usr/bin/google-chrome'
})