【问题标题】:Unable to click on dropdown within iframe - Selenium Python无法单击 iframe 中的下拉菜单 - Selenium Python
【发布时间】:2019-11-29 16:28:12
【问题描述】:

问题:尝试使用 Chrome 驱动程序和 Selenium 和 Python 在 iframe 中单击下拉菜单。

大家好。昨天一位用户好心地帮助了我一个新手查询。我无法单击 url 中的链接,这是因为我必须切换到 iframe。这部分代码现在可以工作了,我导航到一个我希望进行选择的下拉菜单。

我尝试通过修改代码来访问此元素,但收到无法找到该元素的回溯。我正在尝试使用 Select 将下拉列表的值更改为“Aldershot”,按名称和可见文本查找元素。非常感谢任何建议。

#setup
from selenium import webdriver
from selenium.webdriver.support.select import Select

#utilise chrome driver to open specified webpage
driver = webdriver.Chrome("/Users/philthomas/Desktop/web/chromedriver")
driver.maximize_window()
driver.get("http:enfa.co.uk")

#switch to specific iframe and click on 'clubs' button on left hand menu
driver.switch_to.frame(2);
ClubsLink=WebDriverWait(driver,10).until(EC.presence_of_element_located((By.XPATH,
"//span[contains(text(),'Clubs')]")))
ClubsLink.click()

#find drop-down menu and choose 'Aldershot'
select_box = Select(driver.find_element_by_name("team"))
select_box.select_by_visible_text("Aldershot")

追溯:

HTML:

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    您收到错误的原因是 iframe 中存在选择下拉菜单。 您需要先切换到 iframe 才能选择元素。

    诱导WebDriverWaitframe_to_be_available_and_switch_to_it()

    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium import webdriver
    from selenium.webdriver.support.select import Select
    
    #utilise chrome driver to open specified webpage
    driver = webdriver.Chrome("/Users/philthomas/Desktop/web/chromedriver")
    
    driver.maximize_window()
    driver.get("http:enfa.co.uk")
    
    #switch to specific iframe and click on 'clubs' button on left hand menu
    WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME,"left")))
    ClubsLink=WebDriverWait(driver,10).until(EC.presence_of_element_located((By.XPATH,
    "//span[contains(text(),'Clubs')]")))
    ClubsLink.click()
    
    #return from iframe
    driver.switch_to.default_content()
    #Switch to another iframe
    WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME,"main")))
    
    #find drop-down menu and choose 'Aldershot'
    teamselect=WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.NAME,"team")))
    select_box = Select(teamselect)
    select_box.select_by_visible_text("Aldershot")
    

    浏览器快照:

    【讨论】:

    • 非常感谢您的回复,效果非常好。您是否遵循了特定的课程/教程来学习这种特定的方法,或者只是通过特定的 Selenium 文档工作的案例?我热衷于改进和学习更多,因为对编程来说还是很新的。非常感谢
    • 没有这个具体的文档。按照selenium官方文档你会得到大部分的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2020-04-20
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多