2017-04-22 1 views
0

ich versuche versuchen, eine Auto Kasse Skript zu machen, aber ich bin fest mit einer bestimmten Größe aus einer Dropdown-Liste auswählenPython kann nicht ein solches Element nicht finden

from selenium import webdriver 
import requests 

driver = webdriver.Chrome() 
driver.get('http://www.supremenewyork.com/shop/all') 
driver.find_element_by_xpath('//*[@id="container"]/article[112]/div/a').click() 
driver.find_element_by_xpath('//*[@id="size"]/option[2]').click() 

Unten ist der HTML-Code der Drop-Down-Größenauswahl und ich kopiere den xpath, kann aber immer noch kein Element finden, warum?

enter image description here

Antwort

1

Werfen Sie einen Blick auf die Select Klasse. Sie sollten es immer verwenden, wenn Sie mit einem SELECT-Element zu tun haben ... es wird Ihr Leben viel einfacher machen.

sollte Ihr Code aussehen

from selenium.webdriver.support.ui import Select 
select = Select(driver.find_element_by_id('size')) 
select.select_by_visible_text("Medium") 
+0

diesen Code verwendet, und es wirft mir selenium.common.exceptions.NoSuchElementException: Nachricht: kein solches Element: Nicht imstande Element zu finden: { "Methode": "id", "Selektor": "Größe"} – Ksuby

+0

Könnte dies mit WebDriverWait gelöst werden? – Ksuby

+0

Die obige Antwort sollte in Ordnung sein, wenn Ihr Element die ganze Zeit existiert, wenn Ihr Element vielleicht etwas Zeit braucht, um geladen zu werden, dann ist WebDriverWait der richtige Weg Um es weiter zu machen, sollte WebdriverWait IMHO der empfohlene Weg sein Um das Element zu lokalisieren, fügt es den Prozess des Wartens und Abfragens hinzu, bis das Element angezeigt wird. 'Element = WebDriverWait (Treiber, Timeout) .until (expected_conditions.visibility_of_element_located (By.ID," size ")) select = Wählen Sie (Element) select.select_by_visible_text (" Medium ")' –

0

Für Drop-downs Sie nicht driver.findElement direkt nutzen können. Sie sollten die Select-API verwenden. In Java kann Select sel = new Select (driver.findElement (By.name ("size")) sel.selectByvalue or index or visible text verwendet werden. Sie können ur-Code zu Python brechen .. oben ist Java-Code.

0

Versuchen Sie den folgenden Code.

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

browser = webdriver.Chrome() 
browser.get('http://www.supremenewyork.com/shop/all') 
browser.find_element_by_xpath('//*[@id="container"]/article[12]/div/a/img').click() 
WebDriverWait(browser,10).until(EC.visibility_of_any_elements_located((By.ID,'size'))) 
select = Select(browser.find_element_by_id('size')) 
select.select_by_visible_text("Large") 
Verwandte Themen