簡體   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