पायथन का उपयोग करके सेलेनियम के साथ ड्रॉप-डाउन मेनू मान का चयन कैसे करें?


185

मुझे ड्रॉप-डाउन मेनू से एक तत्व का चयन करने की आवश्यकता है ।

उदाहरण के लिए:

<select id="fruits01" class="select" name="fruits">
  <option value="0">Choose your fruits:</option>
  <option value="1">Banana</option>
  <option value="2">Mango</option>
</select>

1) सबसे पहले मुझे उस पर क्लिक करना है। मैं यह करता हूँ:

inputElementFruits = driver.find_element_by_xpath("//select[id='fruits']").click()

2) उसके बाद मुझे अच्छे तत्व का चयन करना है, हम कहते हैं Mango

मैंने इसे करने की कोशिश की inputElementFruits.send_keys(...)लेकिन यह काम नहीं किया।

जवाबों:


112

जब तक आपकी क्लिक आपकी सूची को पॉप्युलेट करने के लिए किसी प्रकार के अजाक्स कॉल को फायर नहीं कर रही है, आपको वास्तव में क्लिक को निष्पादित करने की आवश्यकता नहीं है।

बस तत्व ढूंढें और फिर विकल्पों की गणना करें, इच्छित विकल्प का चयन करें।

यहाँ एक उदाहरण है:

from selenium import webdriver
b = webdriver.Firefox()
b.find_element_by_xpath("//select[@name='element_name']/option[text()='option_text']").click()

आप इसमें और अधिक पढ़ सकते हैं:
/sqa/1355/unable-to-select-an-option-using-seleniums-python-webdriver


18
FYI करें, Selectकक्षा का उपयोग करने से समस्या को हल करना बहुत आसान हो जाता है, मैंने जो उत्तर पोस्ट किया है उसे देखें।
alecxe

1
यदि मैं उपयोग कर रहा हूं तो मुझे क्या करना चाहिए find_by_id? फिर मैं मूल्य की आपूर्ति कैसे करूं? इसके अलावा, मैं xpathएक तत्व का पता कैसे लगा सकता हूं ?
प्रखर मोहन श्रीवास्तव

2
@PrakharMohanSrivastava (और अन्य) XPath को खोजने के लिए, यदि आपके पास क्रोम देव उपकरण में हाइलाइट किया गया स्रोत है, तो आप स्रोत पर राइट क्लिक कर सकते हैं, और उस तत्व का पूर्ण XPath प्राप्त करने के लिए कॉपी -> XPath का चयन कर सकते हैं।
मिलीग्राम

और क्या होगा अगर मेरे पास पाठ का नाम नहीं है? मैं सिर्फ मेनू में पहला तत्व चाहता हूं।
स्कॉट्टीब्लाड्स

@ Alecxe के उत्तर में लिंक किया गया चयन वर्ग एक select_by_index फ़ंक्शन प्रदान करता है जो ऐसा लगता है कि जैसा आप चाहते हैं।
एलानिंग

321

सेलेनियम निर्माण के साथ काम करने के लिए एक सुविधाजनक Selectवर्ग प्रदान करता है select -> option:

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

driver = webdriver.Firefox()
driver.get('url')

select = Select(driver.find_element_by_id('fruits01'))

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

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

यह सभी देखें:


5
यह जाने का एक शानदार तरीका है, और वास्तविक विधि होनी चाहिए। हालाँकि, मैं ध्यान दूंगा कि यदि आपको लेखक के किसी चुनिंदा HTML एलिमेंट को ठीक से सेटअप नहीं करना है तो आपको अधिक एक्सट्यूस "xpath" वर्जन का उपयोग करना पड़ सकता है। यदि केवल इनपुट फ़ील्ड का उपयोग कर रहे हैं, तो xpath को काम करना चाहिए।
मैथ्यू

1
क्या हम by_id के बजाय xpath द्वारा तत्व पा सकते हैं? चयन समारोह में?
गीगाबाइट

2
यह मेरे लिए एक इनपुट ईवेंट को ट्रिगर नहीं करता है :( मुझे इसे स्वयं करना होगा जैसा कि यहां बताया गया है: stackoverflow.com/questions/2856513/…
फ्रेडरिक नॉर्ड

1
बहुत अच्छा। यह कुछ भयानक हैक मैं उपयोग कर रहा था साफ कर दिया।
jww

25

सबसे पहले आपको सेलेक्ट क्लास को इम्पोर्ट करने की जरूरत है और उसके बाद आपको सेलेक्ट क्लास का उदाहरण बनाना होगा। सेलेक्ट क्लास का उदाहरण बनाने के बाद, आप ड्रॉपडाउन सूची से विकल्पों का चयन करने के लिए उस उदाहरण पर चुनिंदा तरीकों का प्रदर्शन कर सकते हैं। यहाँ कोड है

from selenium.webdriver.support.select import Select

select_fr = Select(driver.find_element_by_id("fruits01"))
select_fr.select_by_index(0)

13

मुझे उम्मीद है कि यह कोड आपकी मदद करेगा।

from selenium.webdriver.support.ui import Select

आईडी के साथ ड्रॉपडाउन तत्व

ddelement= Select(driver.find_element_by_id('id_of_element'))

xpath के साथ ड्रॉपडाउन तत्व

ddelement= Select(driver.find_element_by_xpath('xpath_of_element'))

सीएसएस चयनकर्ता के साथ ड्रॉपडाउन तत्व

ddelement= Select(driver.find_element_by_css_selector('css_selector_of_element'))

ड्रॉपडाउन से 'बनाना' का चयन

  1. ड्रॉपडाउन के सूचकांक का उपयोग करना

ddelement.select_by_index(1)

  1. ड्रॉपडाउन के मूल्य का उपयोग करना

ddelement.select_by_value('1')

  1. आप पाठ का उपयोग कर सकते हैं जो ड्रॉप डाउन में प्रदर्शित होता है।

ddelement.select_by_visible_text('Banana')


क्या इसे एक ही कोड लाइन में बनाने का कोई तरीका है? इसके बजाय एक चर बनाने के बाद का चयन करें? धन्यवाद
Jiraheta

2
आप इस तरह सिंगल लाइन कोड लिख सकते हैं। चयन करें (Driver.find_element_by_id ('id_of_element'))। select_by_index (1)
NaramukAbus

7

मैंने बहुत सी चीजों की कोशिश की, लेकिन मेरा ड्रॉप डाउन एक टेबल के अंदर था और मैं एक साधारण चयन ऑपरेशन करने में सक्षम नहीं था। केवल नीचे दिए गए समाधान ने काम किया। यहाँ मैं ड्रॉप डाउन एलिमेंट को हाइलाइट कर रहा हूँ और वांछित मान मिलने तक एरो दबा रहा हूँ -

        #identify the drop down element
        elem = browser.find_element_by_name(objectVal)
        for option in elem.find_elements_by_tag_name('option'):
            if option.text == value:
                break

            else:
                ARROW_DOWN = u'\ue015'
                elem.send_keys(ARROW_DOWN)

6

आपको कुछ भी क्लिक करने की आवश्यकता नहीं है। Xpath या जो भी आप चुनते हैं, उसका उपयोग करें और फिर भेजें कुंजियों का उपयोग करें

आपके उदाहरण के लिए: HTML:

<select id="fruits01" class="select" name="fruits">
    <option value="0">Choose your fruits:</option>
    <option value="1">Banana</option>
    <option value="2">Mango</option>
</select>

अजगर:

fruit_field = browser.find_element_by_xpath("//input[@name='fruits']")
fruit_field.send_keys("Mango")

बस।


3

आप एक css चयनकर्ता संयोजन का अच्छी तरह से उपयोग कर सकते हैं

driver.find_element_by_css_selector("#fruits01 [value='1']").click()

वांछित फल के साथ मूल्य के अनुरूप गुण = मूल्य सीएसएस चयनकर्ता में 1 बदलें।


2
from selenium.webdriver.support.ui import Select
driver = webdriver.Ie(".\\IEDriverServer.exe")
driver.get("https://test.com")
select = Select(driver.find_element_by_xpath("""//input[@name='n_name']"""))
select.select_by_index(2)

यह ठीक काम करेगा


2

यह विकल्प मूल्य के साथ काम करता है:

from selenium import webdriver
b = webdriver.Firefox()
b.find_element_by_xpath("//select[@class='class_name']/option[@value='option_value']").click()

2

इस तरह आप किसी भी ड्रॉपडाउन में सभी विकल्पों का चयन कर सकते हैं।

driver.get("https://www.spectrapremium.com/en/aftermarket/north-america")

print( "The title is  : " + driver.title)

inputs = Select(driver.find_element_by_css_selector('#year'))

input1 = len(inputs.options)

for items in range(input1):

    inputs.select_by_index(items)
    time.sleep(1)

मैं एक का उपयोग करके एक का चयन करने की कोशिश कर रहा हूं for items in range(1,input1): inputs.select_by_index(items), लेकिन यह दूसरे सूचकांक से शुरू होता है। मैं पहला मूल्य कैसे प्राप्त कर सकता हूं?
22

1

selenium.webdriver.support.ui.Selectड्रॉपडाउन चयन के साथ काम करने के लिए कक्षा का उपयोग करने का सबसे अच्छा तरीका है, लेकिन कुछ समय यह HTML के डिजाइन या अन्य मुद्दों के कारण अपेक्षित रूप से काम नहीं करता है।

इस प्रकार की स्थिति में आप execute_script()नीचे दिए गए उपयोग के रूप में वैकल्पिक समाधान भी पसंद कर सकते हैं: -

option_visible_text = "Banana"
select = driver.find_element_by_id("fruits01")

#now use this to select option from dropdown by visible text 
driver.execute_script("var select = arguments[0]; for(var i = 0; i < select.options.length; i++){ if(select.options[i].text == arguments[1]){ select.options[i].selected = true; } }", select, option_visible_text);

0

प्रदान किए गए HTML के अनुसार:

<select id="fruits01" class="select" name="fruits">
  <option value="0">Choose your fruits:</option>
  <option value="1">Banana</option>
  <option value="2">Mango</option>
</select>

एक <option>से एक तत्व का चयन करने के लिएमेनू आपको चयन वर्ग का उपयोग करना होगा । इसके अलावा, आप के साथ बातचीत करने के लिए हैआपको WebDriverWait के लिए प्रेरित करना होगा element_to_be_clickable()

से मैंगो के<option> रूप में पाठ के साथ चयन करने के लिएआप निम्न लोकेटर रणनीतियों में से किसी एक का उपयोग कर सकते हैं :

  • आईडी विशेषता और select_by_visible_text()विधि का उपयोग करना :

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.ui import Select
    
    select = Select(WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "fruits01"))))
    select.select_by_visible_text("Mango")
  • CSS-SELECTOR और select_by_value()विधि का उपयोग करना :

    select = Select(WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "select.select[name='fruits']"))))
    select.select_by_value("2")
  • XPATH और select_by_index()विधि का उपयोग करना :

    select = Select(WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "//select[@class='select' and @name='fruits']"))))
    select.select_by_index(2)

-2
  1. सामग्री सूचीबद्ध करें

सार्वजनिक वर्ग ListBoxMultiple {

public static void main(String[] args) throws InterruptedException {
    // TODO Auto-generated method stub
    System.setProperty("webdriver.chrome.driver", "./drivers/chromedriver.exe");
    WebDriver driver=new ChromeDriver();
    driver.get("file:///C:/Users/Amitabh/Desktop/hotel2.html");//open the website
    driver.manage().window().maximize();


    WebElement hotel = driver.findElement(By.id("maarya"));//get the element

    Select sel=new Select(hotel);//for handling list box
    //isMultiple
    if(sel.isMultiple()){
        System.out.println("it is multi select list");
    }
    else{
        System.out.println("it is single select list");
    }
    //select option
    sel.selectByIndex(1);// you can select by index values
    sel.selectByValue("p");//you can select by value
    sel.selectByVisibleText("Fish");// you can also select by visible text of the options
    //deselect option but this is possible only in case of multiple lists
    Thread.sleep(1000);
    sel.deselectByIndex(1);
    sel.deselectAll();

    //getOptions
    List<WebElement> options = sel.getOptions();

    int count=options.size();
    System.out.println("Total options: "+count);

    for(WebElement opt:options){ // getting text of every elements
        String text=opt.getText();
        System.out.println(text);
        }

    //select all options
    for(int i=0;i<count;i++){
        sel.selectByIndex(i);
        Thread.sleep(1000);
    }

    driver.quit();

}

}


2
प्रश्न स्पष्ट रूप से पायथन समाधान के लिए पूछता है, आपके उत्तर की बहुत सराहना की जाती है, लेकिन इस संदर्भ में इसकी आवश्यकता नहीं है क्योंकि यह जावा में लिखा गया है।

क्षमा करें, लेकिन यह अजगर नहीं है जैसा कि सवाल और टैग में उल्लेख किया गया है
लॉरेंट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.