【问题标题】:How to select a dropdown menu using Selenium Python如何使用 Selenium Python 选择下拉菜单
【发布时间】:2022-07-08 19:09:09
【问题描述】:

我正在做一个个人项目,尝试使用 selenium 从网站上抓取本地团队的结果。该站点有三个下拉列表,目前我很高兴能够更改一个。当我进入页面时,下面的代码会单击拒绝 cookie,这就是 WebDriver 行的作用。我得到了“下拉”,然后出现了一个错误,即不存在这样的元素。我试过 CSS_SELECTOR、XPATH 和所有其他选项都无济于事。我只是对此很陌生,所以这可能是我想念的一些简单的东西,但我已经阅读了很多以前的论坛,有类似的问题,但答案对我不起作用。

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

driver = webdriver.Firefox()
driver.get("https://www.leinsterrugby.ie/domestic-rugby/domestic-fixtures-results/")

time.sleep(3)
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='onetrust-reject-all-handler']"))).click()
time.sleep(3)

dropdown=Select(driver.find_element(By.XPATH,value='//*[@id="groups_data"]')
time.sleep(5)
dropdown.select_by_value('5756')

driver.quit() # close browser

【问题讨论】:

  • 下面的代码点击拒绝 cookie:在我的最后,cookie 弹出窗口保持折叠状态,不会展开。这不是您预期的行为吗?
  • 我正在了解“下拉菜单”:您尝试与哪个下拉菜单进行交互?
  • 这能回答你的问题吗? Switch to an iframe through Selenium and python

标签: python selenium xpath css-selectors html-select


【解决方案1】:

下拉选项为 Men、Schools、Women、Youth 的元素em> 在 <iframe> 内,所以你必须:

  • 诱导WebDriverWait 使所需的帧可用并切换到它。

  • 诱导WebDriverWait 使所需的元素可点击。

  • 您可以使用以下任一Locator Strategies:

    • 使用CSS_SELECTOR:

      driver.get('https://www.leinsterrugby.ie/domestic-rugby/domestic-fixtures-results/')
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[src='https://shared2.sportsmanager.ie/~leinsterrugby/']")))
      Select(WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "select[name=user]")))).select_by_value('7183')
      
    • 使用XPATH:

      driver.get('https://www.t-online.de/themen/e-mail')
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@src='https://shared2.sportsmanager.ie/~leinsterrugby/']")))
      Select(WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//select[@name='user']")))).select_by_value('7183')
      
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 浏览器快照:

【讨论】:

  • 谢谢!是的,我的问题是我不知道它在 iframe 中,非常感谢你的回答真的很有帮助。
猜你喜欢
  • 2023-03-25
  • 2022-11-11
  • 2016-07-28
  • 1970-01-01
  • 2011-12-13
  • 2020-11-22
  • 1970-01-01
  • 2018-02-17
相关资源
最近更新 更多