2017-11-17 1 views
2

I Selen und Python für Web bin mit Schaben und der Seite, die ich diesen linkPython Selen, Scraping dynamische Dropdown

zum Testen verwenden Aber das Problem ist, ich bin nicht in der Lage, die Dynamik des Tropfens zu handhaben unten, hier ist das Problem entsteht

Während der Auswahl des Staates, ist die Stadt auf der Grundlage des Staates geladen, einige PHP und Js gehen in das Back-End, soweit ich weiß.

Also, ich suchte im Internet und kam mit einer Lösung, um auf den irgendwann zu warten, bitte verwenden Sie diese link als Referenz.

Das folgende ist ein Teil meines Codes

from selenium import webdriver 
from selenium.webdriver.support.ui import Select 
from selenium.webdriver.support.ui import WebDriverWait 

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

chrome_path = r"E:\chromedriver.exe" 

driver = webdriver.Chrome(chrome_path) 

driver.get("http://www.blooddonors.in") 
select = Select(driver.find_element_by_xpath('/html/body/table[3]/tbody/tr/td[2]/table[1]/tbody/tr/td/form/table/tbody/tr[2]/td[1]/select')) 

select.select_by_visible_text('Tamil Nadu') 
driver.implicitly_wait(60) 
drop = Select(driver.find_element_by_xpath('//*[@id="div_city"]/select')) 
select.select_by_visible_text('Coimbotore') 

ich ein Fenster sys bin mit und ich versuchte CMD verwenden. Es braucht keine Wartefunktion, es funktioniert ohne es gut.

Der Fehler, ich bin vor ist:

raise NoSuchElementException("Could not locate element with visible text: %s" % text) 
selenium.common.exceptions.NoSuchElementException: Message: Could not locate element with visible text: Coimbotore 

Aber sie ist es eigentlich sie.

Wenn jemand mir helfen kann, das Problem zu lösen, wäre es großartig, und ich kann mit dem nächsten weitermachen.

Dank

+0

Haben Sie 'select' als Grund Scheck gedruckt, dass sie den gewünschten Text enthält? –

+0

kann ich nicht drucken wählen, den Fehler auslöst und die Ausführung stoppt, werden die oben genannten Befehle in cmd arbeiten, vielen Sie –

Antwort

0

So wählen Tamilnadu und wählen Sie dann Coimbotore Sie den folgenden Codeblock verwenden können:

driver.get("http://www.blooddonors.in") 
select = Select(driver.find_element_by_name('select')) 
select.select_by_visible_text('Tamil Nadu') 
drop = Select(driver.find_element_by_name('city')) 
city_option = WebDriverWait(driver, 5).until(lambda x: x.find_element_by_xpath("//select[@name='city']/option[text()='Coimbotore']")) 
city_option.click() 
+1

Danke @DebanjanB es wählt den Block perfekt aus. –

+0

Gute Nachrichten !!! Froh, dir helfen zu können !!! – DebanjanB

+1

Danke das Vergnügen gehört mir. –

0

Selen bietet eine ausgewählte Klasse, die verwendet werden können, Elemente aus der Drop-Down-Menü zu greifen.

select = Select(driver.find_element_by_id('city')) 
select.select_by_value('430') #search by value, coimbotore is 430 
+0

Danke, Aber ich das gleiche Problem konfrontiert bin ... selenium.common.exceptions. NoSuchElementException: Nachricht: kein solches Element: Element kann nicht gefunden werden: {"method": "id", "selector": "city"} –

0

Ihre zweite Dropdown-als drop definiert, während Sie immer noch zuerst zu behandeln versuchen, Drop-Down (select), die nicht "Coimbotore" Option hat ...

Ersetzen Sie einfach

drop = Select(driver.find_element_by_xpath('//*[@id="div_city"]/select')) 
select.select_by_visible_text('Coimbotore') 

mit

drop = Select(driver.find_element_by_xpath('//select[@name="city" and count(option) > 1]')) 
drop.select_by_visible_text('Coimbotore') 
+0

Danke, ich habe die Änderungen vorgenommen und versucht, aber immer noch der gleiche Fehler aufgetreten, Danke. Dies ist der Fehler Raise NoSuchElementException ("Konnte Element mit sichtbarem Text nicht finden:% s"% text) selenium.common.exceptions.NoSuchElementException: Nachricht: Konnte Element mit sichtbarem Text nicht finden: Coimbotore –

+0

Yep. Dein Locator für 'drop' sollte ebenfalls aktualisiert werden. Überprüfen Sie die aktualisierte Antwort – Andersson

+0

Danke bro, ich habe Ihren Code noch überprüft der Fehler erhöht. selen.common.exceptions.NoSuchElementException: Nachricht: kein solches Element: Element konnte nicht gefunden werden: {"method": "xpath", "selector": "// wähle [@ name =" city "und count (option) > 1] "} Ich weiß nicht, ob ich Dinge falsch mache, –