Próbuję uzyskać dostęp do elementu div, w którym wszystkie elementy div mają taką samą nazwę. Pozwól mi wyjaśnić. Właśnie zaczynam od selenu i Pythona i próbuję zeskrobać stronę internetową, aby się nauczyć. Napotkałem następujący problem. Zrobiłem przykład html, aby pokazać tworzenie strony internetowej. Wszystkie elementy DIV mają dokładnie tę samą klasę i tytuł. Następnie znajduje się znacznik h1 dla elementu i znacznik p dla koloru (który jest klikalnym linkiem). Próbuję przeszukać stronę, gdy dajesz jej określone instrukcje. Przykład: Szukam białego roweru wyścigowego. Jestem w stanie znaleźć rowery z pierwszą linijką kodu, ale jak znaleźć właściwy kolor w sekcji rowerów wyścigowych? Jeśli uruchomię wspomniany poniżej Python, pojawi się komunikat o błędzie. Z góry dziękuję!
<!DOCTYPE html>
<html>
<body>
<div class=div title=example>
<h1>racebike</h1>
<p class='test'>black</p>
</div>
<div class=div title=example>
<h1>racebike</h1>
<p class='test'>white</p>
</div>
<div class=div title=example>
<h1>racebike</h1>
<p class='test'>yellow</p>
</div>
<div class=div title=example>
<h1>citybike</h1>
<p class='test'>yellow</p>
</div>
<div class=div title=example>
<h1>citybike</h1>
<p class='test'>green</p>
</div>
</body>
</html>
test = (self.driver.find_element_by_xpath("//*[contains(text(), racebike)]"))
test.self.driver.find_element_by_xpath(".//*[contains(text(), white)]").click
2 odpowiedzi
Aby zlokalizować / click()
na elemencie white racebike , musisz wywołać WebDriverWait dla element_to_be_clickable()
i możesz użyć jednej z poniższych xpath na podstawie Strategie dotyczące lokalizacji:
Korzystanie z
XPATH
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//h1[text()='racebike']//following-sibling::p[@class='test' and text()='white']"))).click()
Używanie
XPATH
z uwzględnieniem rodzica<div>
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='div' and @title='example']/h1[text()='racebike']//following-sibling::p[@class='test' and text()='white']"))).click()
Uwaga : musisz dodać następujące importy:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
Możesz użyć tej samej ścieżki xpath, którą wypróbowałeś w swoim rozwiązaniu. Możliwe, że odpowiedź serwera trwa zbyt długo.
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
element = WebDriverWait(page, 10).until(EC.presence_of_element_located((By.XPATH, "//p[contains(@class, 'white')]")))
element.click()
dla wielu rowerów w kolorze białym
elements= WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located((By.XPATH, "//p[contains(@class, 'white')]")))
for element in elements:
element.click()
Podobne pytania
Powiązane pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.