2017-05-01 5 views
0

Ich habe geckodriver installiert, da Selen nicht mehr mit den neuesten Versionen von Firefox kompatibel ist. Aus diesem Grund musste ich den Code ändern, der für das Scrapen einer Website verwendet wurde. Ich habe Probleme beim Auswählen von Elementen in einer Dropdown-Liste. Im folgenden Code funktioniert alles bis "browser.select"; Ich bekomme den Fehler: 'WebDriver' Objekt hat kein Attribut 'select'. Ich benutze Spyder auf einem Mac.Geckodriver: 'WebDriver' -Objekt hat kein Attribut 'select'

import time 
from selenium import webdriver 
from selenium.webdriver.common.desired_capabilities import  DesiredCapabilities 

firefox_capabilities = DesiredCapabilities.FIREFOX 
firefox_capabilities['marionette'] = True 
firefox_capabilities['binary'] = '/Applications/anaconda/lib/python3.6/site-packages/selenium/webdriver/firefox' 

browser = webdriver.Firefox(capabilities=firefox_capabilities) 

browser.get("https://sonuc.ysk.gov.tr/module/GirisEkrani.jsf") 

time.sleep(2) 
browser.find_element_by_id('closeMessageButton').click() 

     browser.find_element_by_id('j_id112:secimSorgulamaForm:j_id115:secimSecmeTa ble:0:secimId').click() 

browser.find_element_by_id ('j_id112: secimSorgulamaForm: j_id142')() klicken

Schleife durch Provinzen

time.sleep(4) 
il_sayisi = len(browser.find_element_by_id("j_id48:j_id49:j_id108:cmbSecimCevresi").find_elements_by_tag_name('option'))-1 

for j in range(1,il_sayisi): 
    j = j +1 
    iller =  browser.find_element_by_id("j_id48:j_id49:j_id108:cmbSecimCevresi").find_elements_by_tag_name('option') 
    browser.select_dropdown('j_id48:j_id49:j_id108:cmbSecimCevresi',iller[j].value) 
time.sleep(2) 
ilce_sayisi =  len(browser.find_element_by_id("j_id48:j_id49:j_id120:cmbIlceSecimKurulu").find_elements_by_tag_name('option'))-1 
for i in range(0,ilce_sayisi): 
    i = i + 1 
    ilceler = browser.find_element_by_id("j_id48:j_id49:j_id120:cmbIlceSecimKurulu").find_elements_by_tag_name('option') 
    browser.select('j_id48:j_id49:j_id120:cmbIlceSecimKurulu',ilceler[i].value) 
    time.sleep(5) 
    browser.find_element_by_id('j_id48:j_id49:j_id192').click() 
    time.sleep(5) 
    browser.find_element_by_id("j_id48:tabloBilgileriPanel:j_id440").click() 
    time.sleep(5) 
    browser.find_element_by_id("j_id1114:j_id1115:j_id1121").click() 
    time.sleep(7) 

[EDIT:. Der letzte Teil des Codes der bearbeitet wurde folgende und jetzt funktioniert]:

iller = browser.find_element_by_id("j_id48:j_id49:j_id108:cmbSecimCevresi") 
iller_options = iller.find_elements_by_tag_name('option') 
i_options = {option.text.strip(): option.get_attribute("value") 
     for option in iller_options if option.get_attribute("value").isdigit()} 

for k in sorted(list(i_options.keys()))[4:81]: 
# iller 
    iller = browser.find_element_by_id("j_id48:j_id49:j_id108:cmbSecimCevresi") 
    iller_options = iller.find_elements_by_tag_name('option') 
    i_options = {option.text.strip(): option.get_attribute("value") 
      for option in iller_options if option.get_attribute("value").isdigit()} 
    iller_select = Select(iller) 
    iller_select.select_by_value(i_options[k]) 

    time.sleep(5) 
+0

Plese Aktie DOM XML für Drop-down-Steuerung helfen. – Shailendra

+0

Sie sind Option innerhalb Auswahl Drop-Down. Können Sie Optionen mit ausgewählten Steuerelement teilen. – Shailendra

+0

Dies sind zunächst drei Objekte in der Liste von dem inneren HTML (es geht bis 81): \t \t \t \t AFYONKARAHİSAR – bayrah

Antwort

0

Sie müssen etwas tun, wie unten:

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

selectEle = driver.find_element_by_id('<id_of_select_control_containg_these_option>') 

select = Select(selectEle) 

# select by visible text 
select.select_by_visible_text('ADANA') 

# select by value 
select.select_by_value('1') 

so zu verwenden selected method in selen web diver zuerst müssen Sie das Objekt der ausgewählten Klasse erstellen. Dann können Sie unter Methoden verwenden:

select_by_index(index) 
select_by_value(value) 
select_by_visible_text(text) 

Lassen Sie mich wissen, ob es

+0

Ich habe noch nicht herausgefunden, wie ich es in den Code/Loop integrieren kann. – bayrah

+0

Alle Ihre Option sollte innerhalb eines Elements sein, das Typ auswählen ist. Bitte geben Sie dann xml dieses Steuerelements ein. – Shailendra

+0

teilen Sie bitte xml für: iller = browser.find_element_by_id ("j_id48: j_id49: j_id108: cmbSecimCevresi") – Shailendra

Verwandte Themen