You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium Python自动化脚本嵌套if循环失效及多场景适配需求咨询

Got it, let's tackle this problem step by step. I've worked on similar Selenium automation tasks before, so here's a solid approach to cover both the checkbox adaptation and pagination logic you need:

1. Adapt to 1 or 2 Checkboxes per Giveaway

Instead of hardcoding logic for 1 or 2 checkboxes, we can dynamically find all checkbox elements tied to each giveaway and click them. This way, the script automatically adapts to either scenario:

  • Use find_elements() to grab all checkboxes within the current giveaway container (you’ll need to tweak the selector to match your page’s HTML—examples could be '.giveaway-checkbox' or 'input[type="checkbox"]').
  • Loop through the found checkboxes and click each one (add a check if you want to skip already selected boxes).

Here’s a code snippet for this part:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# For a single giveaway element
giveaway = ...  # Fetch the current giveaway container first
checkboxes = WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'input[type="checkbox"]'))
)
for checkbox in checkboxes:
    if not checkbox.is_selected():
        checkbox.click()

2. Implement Pagination Logic

To handle multiple pages, we’ll use a loop that repeats until there’s no next page available:

  1. First, process all giveaways on the current page.
  2. Check if a "Next Page" button exists and is clickable.
  3. If yes, click it and repeat; if not, exit the loop.

Key details to note:

  • Identify the unique selector for your "Next" button (like 'a.next-page' or 'button#next-btn'—use browser dev tools to inspect it).
  • Check if the button is disabled (look for attributes like disabled or a disabled class) to avoid infinite loops.
  • Use WebDriverWait to wait for the next page to load before processing.

Here’s how the pagination loop can look:

while True:
    # Step 1: Process all giveaways on the current page
    giveaways = WebDriverWait(driver, 10).until(
        EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.giveaway-item'))
    )
    for giveaway in giveaways:
        # Click to open the giveaway (adjust selector to match your page)
        giveaway.click()
        
        # If the giveaway opens in a new tab, switch to it (uncomment below)
        # driver.switch_to.window(driver.window_handles[-1])
        
        # Handle checkboxes using the code from section 1
        checkboxes = WebDriverWait(driver, 10).until(
            EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'input[type="checkbox"]'))
        )
        for checkbox in checkboxes:
            if not checkbox.is_selected():
                checkbox.click()
        
        # Close the giveaway tab/window and switch back (if needed)
        # driver.close()
        # driver.switch_to.window(driver.window_handles[0])
    
    # Step 2: Check for next page
    try:
        next_button = WebDriverWait(driver, 5).until(
            EC.element_to_be_clickable((By.CSS_SELECTOR, 'a.next-page'))
        )
        # Exit loop if the button is disabled (adjust based on your page's disabled state)
        if 'disabled' in next_button.get_attribute('class'):
            break
        next_button.click()
        # Wait for the next page to fully load
        WebDriverWait(driver, 10).until(
            EC.staleness_of(giveaways[0])  # Wait until old page elements are gone
        )
    except:
        # No next page found—exit the loop
        break

3. Quick Adjustments for Your Use Case

  • Selectors: Replace all placeholder CSS selectors (like '.giveaway-item') with the actual ones from your target website. Use F12 dev tools to inspect elements and get accurate selectors.
  • Wait Conditions: Avoid time.sleep()—WebDriverWait makes the script more reliable by waiting until elements are ready to interact with.
  • Tab Handling: If giveaways open in new tabs, uncomment and adjust the tab switching code to avoid losing context.

内容的提问来源于stack exchange,提问作者mateo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:49:19