繁体   English   中英

循环以从 selenium 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM