Я пытаюсь автоматизировать процесс, в котором я могу посетить веб-сайт, навести курсор на панель навигации меню и щелкнуть параметры в раскрывающемся списке, чтобы посетить эту страницу.
Для этого я работаю с Selenium (используя Python) и использую https://www.shoppersstop.com/ для тестирования своего кода.
Когда я запускаю приведенный ниже код, веб-сайт открывается правильно, но я получаю пустой раскрывающийся список, поэтому, когда я пытаюсь щелкнуть любую опцию из раскрывающегося списка, я получаю сообщение об ошибке «Элементы не найдены».Вот скриншот того, что я вижу.
Я попробовал использовать тот же код для просмотра раскрывающегося списка на веб-сайте Amazon.In, и он работал правильно. Я также пробовал добавить time.sleep() между действиями, но это все равно не работает.
Сообщение об ошибке ниже: Сообщение: такого элемента нет: невозможно найти элемент: {"method":"xpath","selector":"//a[text()='All Indian Wear']"} (Информация о сеансе: chrome=123.0.6312.107); Документацию по этой ошибке можно найти по адресу: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no- such-element-Exception
Ниже мой код:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
import pandas as pd
import requests
import time
import re
# Set Chrome options
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36")
# Initialize driver with Chrome options
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.shoppersstop.com/") # Open the website
driver.maximize_window() #Maximize window
try:
WebDriverWait(driver, 20).until(lambda driver: driver.execute_script('return document.readyState') == 'complete')
#time.sleep(10)
actions = ActionChains(driver)
women_category = driver.find_element(By.XPATH, "//html/body/main/header/nav/div[1]/div/ul[2]/li[4]/a")
actions.move_to_element(women_category) # Hover over the Women's category to reveal the dropdown
actions.perform()
#time.sleep(30)
indian_wear = driver.find_element(By.XPATH, "//a[text()='All Indian Wear']")
actions.move_to_element(indian_wear).perform().click()
#time.sleep(20)
except Exception as e:
print(e)
driver.quit() # Close the browser
Уже упоминалось выше.
Я согласен. Однако приведенное ниже решение с использованием SeleniumBase работает для меня!
Обычный Selenium блокируется на этом сайте для определенных разделов, но https://github.com/seleniumbase/SeleniumBase успешно проходит:
pip install seleniumbase
, а затем с помощью python
выполните следующее:
from seleniumbase import SB
with SB(uc=True, test=True) as sb:
sb.driver.get("https://www.shoppersstop.com/")
sb.hover_and_click('a[title = "WOMEN"]', "//a[text()='All Indian Wear']")
breakpoint()
Введите c
и нажмите Enter
в консоли, чтобы продолжить с Python breakpoint()
.
Обратите внимание, что SeleniumBase
автоматически определяет селекторы, поэтому вы можете использовать CSS или XPath для встроенных методов SeleniumBase.
Спасибо @Michael за то, что познакомил меня с SeleniumBase. Приведенный выше код изначально не работал, но ввел sb.sleep(3) до того, как оператор hover_and_click исправил это. Вероятно, из-за ограничений по времени загрузки страницы сначала он не работал. Спасибо большое еще раз!
Я получаю то же самое. Я не знаю, что это такое. Я так понимаю это какая-то защита от ботов?