![](/img/trans.png)
[英]Cant select a value from a drop down list using Selenium in python
[英]loop to select items consequently from drop down list in selenium python
有一个包含 4 个项目的列表,我需要使用 (select_by_index) 在 4 个项目之间循环,并在选择每个项目后执行一个名为 reserve() 的函数
我的代码是:
driver.get('https://foreupsoftware.com/index.php/booking/20290#/')
driver.maximize_window()
course=driver.find_element(By.ID,'schedule_select')
dropdown_1=Select(course)
dropdown_1.select_by_index(0)
course=driver.find_element(By.ID,'schedule_select')
dropdown_1=Select(course)
dropdown_1.select_by_index(1)
course=driver.find_element(By.ID,'schedule_select')
dropdown_1=Select(course)
dropdown_1.select_by_index(2)
course=driver.find_element(By.ID,'schedule_select')
dropdown_1=Select(course)
dropdown_1.select_by_index(3)
def reserve():
non_passholder_button=driver.find_element(By.XPATH,'//button[@class="btn btn-primary col-md-4 col-xs-12 col-md-offset-4"][contains(., "Non Passholder")]')
non_passholder_button.click()
在分析网页后,我发现 url 由下拉菜单中的选项组成。 因此,首先您可以获得页面中的所有选项,然后您可以浏览使用该选项构造的每个 url。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
chrome_path = r"C:\Users\hpoddar\Desktop\Tools\chromedriver_win32\chromedriver.exe"
s = Service(chrome_path)
driver = webdriver.Chrome(service=s)
driver.get(url)
options = driver.execute_script("""
var result = [];
var all = document.querySelectorAll("option");
for (var i=0, max=all.length; i < max; i++) {
result.push(all[i].getAttribute('value'));
}
return result;
""")
for option in options:
value_url = f'https://foreupsoftware.com/index.php/booking/20153/{option}#/teetimes/'
driver.get(value_url)
non_passholder_button = driver.find_element(by=By.XPATH, value="//button[contains(text(),'Non Passholder')]")
non_passholder_button.click()
# the page has been opened after the click
# DO YOUR STUFF HERE
编辑:正如所讨论的,OP希望强制单击这些选项,并且不想通过构建一个url来遍历每个页面。
这是你可以做到的
url = 'https://foreupsoftware.com/index.php/booking/20155/3782#/teetimes/'
driver.get(url)
option_index = 0
num_of_options = len(driver.find_elements(By.CSS_SELECTOR, '#schedule_select > option'))
while(option_index < num_of_options):
facility = driver.find_element(By.ID, 'schedule_select')
facility.click()
drop_options = driver.find_elements(By.CSS_SELECTOR, '#schedule_select > option')
drop_options[option_index].click()
non_passholder_button = driver.find_element(by=By.XPATH, value="//button[contains(text(),'Non Passholder')]")
non_passholder_button.click()
# DO YOUR STUFFS HERE
driver.get(url)
option_index += 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.