【问题标题】:Cannot switchTo frames -- keep getting AttributeError无法切换到帧 - 不断收到 AttributeError
【发布时间】:2015-05-17 16:45:02
【问题描述】:

我第一次发帖。对于任何失误,我提前道歉。

我正在用 Python 编写,使用 Selenium,试图从一些网页中抓取一些信息。

经过两天的搜索-尝试-搜索,我似乎无法解决这个难题。

我的问题是这样的;在尝试使用 Selenium/Python 登录网站时,我无法“找到元素”登录。经过大量搜索后,我意识到我可能需要切换框架才能找到元素。我已经尝试了很多不同的方式switchTo(或 switch_to)命令——而且我不断收到消息

“属性错误:SwitchTo 实例没有 call 方法”。

我将发布最近的尝试(如果我可以提供更多信息,请告诉我):

在硒中:

waitUntilReady(browser)  
browser.switch_to().frame(browser.findElement(By.ID("iframe[id='credentials']")))
elem = WebDriverWait(browser, 60).until(EC.presence_of_element_located((By.NAME, "Ecom_User_ID")))
elem = browser.find_element_by_name("Ecom_User_ID")
elem.send_keys("frustrated")

返回的内容(在终端中):

文件“someproj.py”,第 56 行,在 browser.switch_to().frame(browser.findElement(By.ID("iframe[id='credentials']"))) AttributeError: SwitchTo 实例没有 call 方法

html表单网站:

 <!DOCTYPE html>

    <html lang="en" webdriver="true">
        <head></head>
        <body onload="onloadhandler()">
            <div class="m-header"></div>
            <div class="container">
                <div class="header"></div>
                <div class="ten columns">
                    <h2></h2>
                    <iframe id="loginsubtab" height="375" frameborder="0" width="100%" src="/nidp/jsp/content.jsp?sid=0&id=289&sid=0" scrolling="no">
                        #document
                            <!DOCTYPE html>
                            <html lang="en" webdriver="true">
                                <head></head>
                                <body onload="onloadhandler('selectedCard')">
                                    <div id="content">
                                        <table border="0" width="100%">
                                            <tbody>
                                                <tr>
                                                    <td>
                                                        <iframe id="credentials" height="375" frameborder="0" width="100%" src="/nidp/saml2/sso?id=289&sid=0&option=credential&sid=0" scrolling="no">
                                                            #document

非常感谢您的任何想法或指导!!!

【问题讨论】:

    标签: python selenium switch-statement frames


    【解决方案1】:

    您使用了错误的选择器。您使用的选择器是 cssSelector 但不是 id

    waitUntilReady(browser)  
    # or use id as follows
    # browser.switch_to.frame(browser.findElement(By.ID, 'credentials'))
    #browser.switch_to.frame(browser.find_element_by_id('credentials'))
    browser.switch_to.frame(browser.findElement(By.CSS_SELECTOR, "iframe[id='credentials']"))
    elem = WebDriverWait(browser, 60).until(EC.presence_of_element_located((By.NAME, "Ecom_User_ID")))
    elem = browser.find_element_by_name("Ecom_User_ID")
    elem.send_keys("frustrated")
    

    【讨论】:

    • browser.switch_to.frame(browser.find_element_by_id('loginsubtab')) browser.switch_to.frame(browser.find_element_by_id('credentials'))哟!有用!!!!!!!!大大大大爱你。谢谢!!!
    • @Saifur--在你走之前,一旦我进入下一页,我需要切换回来吗?如果我确实留在同一个页面上,我会只做 switch_from 吗?
    • 是的,在同一页面上,您需要切换回父框架。您需要使用driver.switch_to.default_content。见doc
    【解决方案2】:

    首先,这看起来不对:

    browser.findElement(By.ID("iframe[id='credentials']"))
    

    由于您是通过 ID 查找元素,因此您不需要包含 iframe[id="..."]

    尝试:

    browser.findElement(By.ID('credentials'))
    

    【讨论】:

    • 谢谢!我试过你的建议,它返回了同样的错误 //browser.switch_to().frame(browser.findElement(By.ID('credentials'))) AttributeError: SwitchTo instance has no call method/ /
    • @Christine 你只是在 switch_to 之后不需要括号
    猜你喜欢
    • 2018-12-03
    • 2019-09-07
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    相关资源
    最近更新 更多