【问题标题】:Geckodriver: 'WebDriver' object has no attribute 'select'Geckodriver:“WebDriver”对象没有“选择”属性
【发布时间】:2017-05-01 03:08:16
【问题描述】:

我安装了 geckodriver,因为 selenium 不再与最新版本的 Firefox 兼容。出于这个原因,我不得不修改用于抓取网站的代码。我在选择下拉列表中的项目时遇到问题。在下面的代码中,一切正常,直到“browser.select”;我收到错误消息:“WebDriver”对象没有“选择”属性。我在 Mac 上使用 Spyder。

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').click()

遍历省份

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)

【问题讨论】:

  • 请共享 DOM XML 以进行下拉控件。
  • 它们是选择下拉菜单中的选项。您可以与选择控件共享选项吗?
  • 这是内部 HTML 列表中的前三个对象(通过 81):

标签: python selenium geckodriver


【解决方案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')

所以首先要在 selenium web diver 中使用 select 方法,你需要创建 select 类的对象。然后你可以使用以下方法:

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

如果有帮助请告诉我

【讨论】:

  • 我还没有弄清楚如何将它合并到代码/循环中。
  • 您的所有选项都应该在 select 类型的元素内。请输入该控件的xml。
  • 请分享 xml 为:iller = browser.find_element_by_id("j_id48:j_id49:j_id108:cmbSecimCevresi")
  • 如果我的解决方案对您有用,请接受答案。
猜你喜欢
  • 2022-01-08
  • 2022-11-24
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 2022-06-29
  • 2022-06-25
  • 2022-11-19
  • 2023-01-07
相关资源
最近更新 更多