Нажав на каждый div из контейнера в Selenium - PullRequest
1 голос
/ 14 октября 2019

Я использую селен для автоматизации доступа к https://www.nemlig.com/ страницам, и я не знаю, как перебирать (скажем) 8 div, все содержится в другом div.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(executable_path = r'C:\Users\user\lib\chromedriver_77.0.3865.40.exe')
wait = WebDriverWait(driver,10)
driver.maximize_window()
driver.get("https://www.nemlig.com/")

wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".timeslot-prompt.initial-animation-done")))
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[type='tel'][class^='pro']"))).send_keys('2300')
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".btn.prompt__button"))).click()

Выше приведен код. После этого я хочу получить доступ к кнопкам даты одну за другой в заданный интервал времени.

enter image description here

У меня есть проблемы с достижением этого, поскольку все онивыглядят одинаково в HTML. Как я могу сказать веб-драйверу щелкнуть следующий элемент div внутри контейнера, пока не будет выполнено условие, что все 8 дат будут доступны?

1 Ответ

1 голос
/ 14 октября 2019

Induce WebDriverWait и presence_of_all_elements_located () и следующий CSS-селектор. Я добавил проверку даты, чтобы проверить, что если дата недоступна в списке, нажмите эту дату.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

driver = webdriver.Chrome(executable_path = r'C:\Users\user\lib\chromedriver_77.0.3865.40.exe')
wait = WebDriverWait(driver,20)
driver.maximize_window()
driver.get("https://www.nemlig.com/")

wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".timeslot-prompt.initial-animation-done")))
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[type='tel'][class^='pro']"))).send_keys('2300')
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".btn.prompt__button"))).click()
dates=[]
elements=wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,"div[data-automation='dayDateTmSlt']")))
for ele in elements:
    if ele.text not in dates:
       dates.append(ele.text)
       driver.execute_script("arguments[0].click();", ele)
       time.sleep(3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...