Geckodriver: объект 'WebDriver' не имеет атрибута 'select'
Я установил geckodriver, так как селен больше не совместим с последними версиями Firefox. По этой причине мне пришлось изменить код, который работал для очистки веб-сайта. У меня проблемы с выбором элементов в раскрывающемся списке. В приведенном ниже коде все работает до "browser.select"; Я получаю сообщение об ошибке: объект "WebDriver" не имеет атрибута "выбрать". Я использую Spyder на Mac.
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') нажмите ().
Цикл по провинциям
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)
[РЕДАКТИРОВАТЬ: последняя часть кода была отредактирована до следующего и теперь работает]:
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)
1 ответ
Вам нужно сделать что-то вроде ниже:
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')
поэтому для использования метода select в Selen We b Diver сначала необходимо создать объект класса select. Тогда вы можете использовать следующие методы:
select_by_index(index)
select_by_value(value)
select_by_visible_text(text)
Дайте мне знать, если это поможет