无法切换到帧 - 继续获取AttributeError

时间:2015-05-17 16:45:02

标签: python selenium switch-statement frames

我的第一次发帖。我为任何失误事先道歉。

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

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

我的问题是这个;在尝试使用Selenium / Python登录网站时,我无法“找到元素”登录。经过多次搜索,我意识到我可能需要切换帧来查找元素。我已经尝试了许多不同的switchTo(或switch_to)命令 - 我不断收到消息

  

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

我会发布最近的尝试(如果我能提供任何进一步的信息,请告诉我):

在硒中:

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行,in           browser.switch_to()。帧(browser.findElement(By.ID( “IFRAME [ID = '凭证']”)))       AttributeError:SwitchTo实例没有调用方法

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

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

2 个答案:

答案 0 :(得分: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")

答案 1 :(得分:0)

首先,这看起来并不正确:

{'ignore_key': 'arb1', 'k2': 'va1', 'key': 'value1'}
{'ignore_key': 'arb113', 'k2': 'va2', 'key': 'value2'}

由于您要按ID查找元素,因此您无需包含browser.findElement(By.ID("iframe[id='credentials']"))

尝试:

iframe[id="..."]