使用Python的Selenium(选择选项)

1 投票
1 回答
48 浏览
提问于 2025-04-13 02:08

我正在用Python测试Selenium,想从一个下拉菜单中选择一个选项。

这次我在测试一个网站,地址是https://www.motogp.com/es/gp-results/2024/qat/motogp/rac/classification,我需要把比赛选项换成其他的,比如说“spr”,因为直接在网页上更改后会自动跳回“rac”。

我试过:

select_element = driver.find_element(By.CLASS_NAME, "primary-filter__filter-select--cat")
select = Select(select_element)

但是,我无法选择这个选项。我想正确获取网址。

1 个回答

1

问题出在这段代码上:By.CLASS_NAME, "primary-filter__filter-select--cat"。它无法找到任何网页元素。

解决办法:使用下面的XPath定位方法

By.XPATH, "(//select[@class='primary-filter__filter-select primary-filter__filter-select--cat'])[2]"

XPath表达式解释:

  • (//select[@class='primary-filter__filter-select primary-filter__filter-select--cat'])[2] -- 这个表达式用来找到HTML文档中第二个带有指定类名 primary-filter__filter-select primary-filter__filter-select--cat 的下拉列表元素(<select>

这里是完整的可运行代码:

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

driver = webdriver.Chrome()
driver.maximize_window()
wait = WebDriverWait(driver, 10)
driver.get("https://www.motogp.com/es/gp-results/2024/qat/motogp/rac/classification")

# Click on Rechazar button
wait.until(EC.element_to_be_clickable((By.ID, "onetrust-reject-all-handler"))).click()

select_element = wait.until(EC.element_to_be_clickable((By.XPATH, "(//select[@class='primary-filter__filter-select primary-filter__filter-select--cat'])[2]")))
select = Select(select_element)
select.select_by_visible_text("SPR")
time.sleep(20)

结果:

在这里输入图片描述

撰写回答