পাইথন ব্যবহার করে সেলেনিয়ামের সাথে কীভাবে একটি ড্রপ-ডাউন মেনু মান নির্বাচন করবেন?


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
এফওয়াইআই, Selectক্লাস ব্যবহার করে সমস্যাটি সমাধান করা অনেক সহজ হয়ে যায়, আমি পোস্ট করেছি উত্তর দেখুন।
অ্যালেক্সে

1
আমি যদি ব্যবহার করছি তবে আমি কী করব find_by_id? আমি তখন মানটি কীভাবে সরবরাহ করব? এছাড়াও, আমি কীভাবে xpathএকটি উপাদানটির সন্ধান করব?
প্রখর মোহন শ্রীবাস্তব

2
এক্সপ্রথটি খুঁজে পেতে @ প্রচারমোহনশ্রীবাস্তব (এবং অন্যরা), যদি আপনার ক্রোম দেব সরঞ্জামগুলিতে উত্সটি হাইলাইট করা থাকে তবে আপনি উত্সটিতে ডান ক্লিক করতে পারেন এবং সেই উপাদানটির সম্পূর্ণ এক্সপ্যাথ পেতে অনুলিপি -> এক্সপথ বেছে নিতে পারেন।
মিগ্রোলিন

আর যদি আমার লেখার নাম না থাকে? আমি কেবল মেনুতে প্রথম উপাদান চাই।
স্কটিব্ল্যাডেস

@ অ্যালেক্সির উত্তরে লিঙ্কযুক্ত সিলেক্ট ক্লাসটি একটি সিলেক্ট_বাই_ইনডেক্স ফাংশন সরবরাহ করে যা দেখে মনে হয় এটি আপনি যা চান।
alanning

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
এটি যাওয়ার দুর্দান্ত উপায় এবং এটি ডি-ফ্যাক্টো পদ্ধতি হতে হবে। তবে, আমি নোট করব যে ফর্মটির লেখক যদি কোনও নির্বাচিত এইচটিএমএল উপাদানটি সঠিকভাবে সেটআপ না করে থাকে তবে আপনাকে আরও অবসন্ন "এক্সপথ" সংস্করণ ব্যবহার করতে হবে। যদি কেবল ইনপুট ক্ষেত্রগুলি ব্যবহার করা হয় তবে এক্সপথের কাজ করা উচিত।
ম্যাথু 21

1
আমরা বাইপ্যাডের পরিবর্তে এক্সপথ দিয়ে উপাদানটি খুঁজে পেতে পারি? নির্বাচন ফাংশনে?
গিগা বাইট

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'))

এক্সপথ সহ ড্রপডাউন উপাদান element

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')


এটি একটি একক কোড লাইনে তৈরি করার উপায় আছে? পরিবর্তে একটি পরিবর্তনশীল তৈরি করার পরে নির্বাচন করুন প্রয়োগ? ধন্যবাদ
জিরাহেতা

2
আপনি এই মত একটি একক লাইন কোড লিখতে পারেন। নির্বাচন করুন (ড্রাইভার.ফাইন্ড_ইলেটমেন্ট_বি_আইডি ('আইডি_ফ_এলিমেন্ট')) ।___ইন্ডেক্স (1)
নারামুক অাবুস

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

আপনাকে কিছু ক্লিক করতে হবে না। এক্সপাথ বা আপনি যা যা বেছে নিন তা ব্যবহার করুন এবং তারপরে কী কী প্রেরণ করুন তা ব্যবহার করুন

আপনার উদাহরণের জন্য: এইচটিএমএল:

<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

আপনি একটি ভাল সিএসএস নির্বাচক সমন্বয় ব্যবহার করতে পারেন

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), তবে এটি দ্বিতীয় সূচক থেকে শুরু হয়। আমি কিভাবে প্রথম মান পেতে পারি?
আরএক্সটি

1

selenium.webdriver.support.ui.Selectক্লাসটি ড্রপডাউন নির্বাচনের সাথে কাজ করার সর্বোত্তম উপায় তবে এইচটিএমএল ডিজাইনের ইস্যু বা অন্যান্য সমস্যার কারণে এটি প্রত্যাশার মতো কাজ করে না।

এই ধরণের পরিস্থিতিতে আপনি 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

প্রদত্ত এইচটিএমএল অনুসারে:

<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> থেকে একটি উপাদানমেনু আপনাকে সিলেক্ট ক্লাস ব্যবহার করতে হবে । তদ্ব্যতীত, যেমন আপনাকে সাথে যোগাযোগ করতে হবেএর জন্য আপনাকে ওয়েবড্রাইভারওয়েট প্ররোচিত করতে হবে 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")
  • সিএসএস-নির্বাচনকারী এবং 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")
  • এক্সপ্যাট এবং 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. তালিকাবদ্ধ

পাবলিক ক্লাসের তালিকাবক্স মাল্টিপল {

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
প্রশ্নটি পরিষ্কারভাবে একটি পাইথন সমাধানের জন্য জিজ্ঞাসা করে, আপনার উত্তরটি খুব প্রশংসাযোগ্য, তবে জাভাতে লেখা আছে বলে এই প্রসঙ্গে প্রয়োজন নেই isn't

দুঃখিত তবে প্রশ্ন এবং ট্যাগগুলিতে উল্লিখিত হিসাবে এটি পাইথন নয়
লরেন্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.