programing

Python을 사용하여 Selenium에서 드롭다운 메뉴 값을 선택하는 방법은 무엇입니까?

kingscode 2022. 10. 19. 21:23
반응형

Python을 사용하여 Selenium에서 드롭다운 메뉴 값을 선택하는 방법은 무엇입니까?

드롭다운 메뉴에서 요소를 선택해야 합니다.

예를 들어 다음과 같습니다.

<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(...)하지만 소용없었다.

Selenium은 함께 일하기에 편리한 클래스를 제공합니다.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')

다음 항목도 참조하십시오.

클릭으로 목록을 채우는 Ajax 호출이 실행되지 않는 한 클릭을 실행할 필요가 없습니다.

요소를 찾은 다음 옵션을 열거하고 원하는 옵션을 선택하십시오.

다음은 예를 제시하겠습니다.

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

자세한 내용은 다음을 참조하십시오.
https://sqa.stackexchange.com/questions/1355/unable-to-select-an-option-using-seleniums-python-webdriver

이 코드가 도움이 되길 바랍니다.

from selenium.webdriver.support.ui import Select

ID가 있는 드롭다운 요소

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

드롭다운 요소(xpath 포함)

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

드롭다운 요소(css 셀렉터 포함

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

먼저 Select 클래스를 Import한 후 Select 클래스의 인스턴스를 만들어야 합니다.Select 클래스 인스턴스를 만든 후 해당 인스턴스에서 선택 방법을 수행하여 드롭다운 목록에서 옵션을 선택할 수 있습니다.여기 코드가 있습니다.

from selenium.webdriver.support.select import Select

select_fr = Select(driver.find_element_by_id("fruits01"))
select_fr.select_by_index(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> [ Select Class ]를 사용해야 .게다가, 은 드롭다운 메뉴와 상호작용해야 하기 때문에 당신은 WebDriverWait를 유도해야 합니다.element_to_be_clickable().

를 선택하려면<option>에서 Mango라는 텍스트를 사용하여 다음 로케이터 전략 중 하나를 사용할 수 있습니다.

  • ID 속성 사용 및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)
    

여러 가지 시도를 했지만, 테이블 안쪽에 쓰러져 있어서 간단한 선택 조작을 할 수 없었습니다.아래 솔루션만 작동했습니다.여기서는 드롭 다운 elem을 강조 표시하고 원하는 값을 얻을 때까지 아래 화살표를 누릅니다.

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

아무 것도 클릭할 필요가 없습니다.find by xpath 또는 원하는 것을 사용한 후 send 키를 사용합니다.

예: 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>

Python:

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

바로 그겁니다.

CSS 셀렉터의 조합은,

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

속성 = value css selector의 1을 원하는 과일에 해당하는 값으로 변경합니다.

이렇게 하면 드롭다운의 모든 옵션을 선택할 수 있습니다.

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)

옵션값으로 동작합니다.

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

이런 투고를 여러 번 검토한 후, 저는 드롭다운에서 항목을 선택할 수 있는 솔루션을 찾아냈습니다..send_keys, 클릭() 및 선택을 다양한 방법으로 시도했지만 성공하지 못했습니다.드롭다운에서 항목을 클릭하기 전에 click() 명령을 드롭다운으로 3번 전송했습니다.

dropMenu = browser.find_element_by_id('cmbDeviceType')
dropMenu.click()
dropMenu.click()
dropMenu.click()

deviceType = browser.find_element_by_id('cmbDeviceType_DDD_L_LBI16T0')
deviceType.click()

정말 예쁘진 않지만 효과가 있어

이게 도움이 됐으면 좋겠네요.이것은 Firefox 88.0.1의 Python 3.7.7에서 수행되었습니다.

모든 클릭과 선택에 이 기능을 사용하고 있으며, 항상 작동합니다.드롭다운 항목의 경우 xpath가 선택하려는 실제 값인지 확인하십시오.

var = WebDriverWait(driver, explicit_wait_seconds).until(
        EC.element_to_be_clickable((By.XPATH, self)))
    # added the click here.
    ActionChains(driver).move_to_element(var).click()
    perform_actions()

actions.perform()
 # Reset was required to clear it. Might be patched now.
actions.reset_actions()
for device in actions.w3c_actions.devices:
    device.clear_actions()
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)

잘 될 거야

Without (없음)<select>

이 기능은 내가 매번 드롭다운에 직면할 때마다 작동한다.<select> 표시

# Finds the dropdown option by its text
driver.find_element_by_xpath("//*[text()='text of the option']")

★★★ActionChains 표시

from selenium.webdriver.common.action_chains import ActionChains

ActionChains

drp_element = driver.find_element_by_xpath("//*[text()='text of the option']")
action = ActionChains(driver)
action.click(on_element=drp_element).perform()

Using Following Way 드롭다운 값을 선택할 수 있습니다.

select=browser.find_element(by=By.XPATH,value='path to the dropdown')
 select.send_keys("Put value here to select it")

「 」를 사용하는 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);
dropdown1 = Select(driver.find_element_by_name("fruits"))
dropdown1.select_by_visible_text('banana')
  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();

}

}

언급URL : https://stackoverflow.com/questions/7867537/how-to-select-a-drop-down-menu-value-with-selenium-using-python

반응형