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

获取DummyTicket页面下拉框XPATH,实现Visa extension自动化选择

解决方案

你的问题出在目标下拉框是Select2动态组件,并非原生HTML <select> 元素,所以不能用常规的Select类操作,且原代码未等待下拉面板展开就直接定位选项,导致元素不可交互。以下是修正后的完整代码:

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

driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("https://www.dummyticket.com/dummy-ticket-for-visa-application/")
driver.maximize_window()

# 选择单程票
driver.find_element(By.XPATH, "//input[@id='product_550']").click()

# 填写姓名
driver.find_element(By.XPATH, "//input[@placeholder='first and middle name as on passport']").send_keys("Waleed")
driver.find_element(By.XPATH, "//input[@placeholder='last name as on passport']").send_keys("Khan")

# 处理出生日期选择器
driver.find_element(By.XPATH, "//input[@id='dob']").click()
Date_Picker_month = Select(driver.find_element(By.XPATH, "//select[@aria-label='Select month']"))
Date_Picker_month.select_by_visible_text("Dec")
Date_Picker_year = Select(driver.find_element(By.XPATH, "//select[@aria-label='Select year']"))
Date_Picker_year.select_by_visible_text("1993")

all_dates = driver.find_elements(By.XPATH, "//table[@class='ui-datepicker-calendar']/tbody/tr/td/a")
for dates in all_dates: 
    if dates.text == "27": 
        dates.click() 
        break

# 选择护照类型(保留原逻辑)
driver.find_element(By.XPATH, "//div[1]//div[1]//form[1]//div[3]//div[1]//div[1]//p[4]//span[1]//input[1]").click()
driver.find_element(By.XPATH, "//div[1]//div[1]//form[1]//div[3]//div[1]//div[1]//p[4]//span[1]//input[1]").click()

# 填写出发地和目的地
driver.find_element(By.XPATH, "//input[@name='fromcity']").send_keys("Pakistan")
driver.find_element(By.XPATH, "//input[@name='tocity']").send_keys("United States Of America")

# 处理出发日期选择器
driver.find_element(By.XPATH, "//input[contains(@name,'departon')]").click()
departure_month = Select(driver.find_element(By.XPATH, "//select[@class='ui-datepicker-month']"))
departure_month.select_by_visible_text("Dec")
departure_year = Select(driver.find_element(By.XPATH, "//select[@class='ui-datepicker-year']"))
departure_year.select_by_visible_text("2023")

all_dates1 = driver.find_elements(By.XPATH, "//table[@class='ui-datepicker-calendar']/tbody/tr/td/a")
for departure_dates in all_dates1: 
    if departure_dates.text == "11": 
        departure_dates.click() 
        break

# 处理Select2下拉框:选择Visa extension
wait = WebDriverWait(driver, 15)
# 点击下拉框触发选项面板展开
ticket_dropdown = wait.until(EC.element_to_be_clickable((By.XPATH, "//span[@class='select2-selection select2-selection--single']")))
ticket_dropdown.click()
# 等待目标选项可见并点击
visa_extension_option = wait.until(EC.visibility_of_element_located((By.XPATH, "//li[@role='option' and text()='Visa extension']")))
visa_extension_option.click()

关键修正点:

  1. 移除无用导入:删除了from telnetlib import EC,避免与selenium的expected_conditions as EC命名冲突。
  2. 适配Select2组件:
    • 先等待下拉触发元素可点击并点击,确保选项面板完全展开
    • 显式等待目标选项加载完成后再点击,解决元素不可见/不可交互问题
  3. 精准选项定位:用//li[@role='option' and text()='Visa extension']定位选项,避免全局XPath的歧义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:31:05