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'))
드롭다운에서 '바나나' 선택
- 드롭다운 색인 사용
ddelement.select_by_index(1)
- 드롭다운 값 사용
ddelement.select_by_value('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')
- 목록 항목
퍼블릭 클래스 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
'programing' 카테고리의 다른 글
함수가 발신자가 인식하는 일부 인수를 변경할 수 있지만 다른 인수는 변경할 수 없는 이유는 무엇입니까? (0) | 2022.10.19 |
---|---|
(C#과 같이) PHP로 스태틱클래스를 만들 수 있습니까? (0) | 2022.10.19 |
사전에서 반복하는 동안 사전에서 항목을 삭제하려면 어떻게 해야 합니까? (0) | 2022.10.19 |
버튼을 사용하여 페이지를 다른 페이지로 리디렉션하려면 어떻게 해야 합니까? (0) | 2022.10.19 |
cygwin에서 mysql에 연결 (0) | 2022.10.19 |