python - 无法切换到帧——不断出现 AttributeError

标签 python selenium switch-statement frames

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

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

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

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

"Attribute error: SwitchTo instance has no call method".

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

在 Selenium 中:

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")

返回什么(在终端中):

File "someproj.py", line 56, in browser.switch_to().frame(browser.findElement(By.ID("iframe[id='credentials']"))) AttributeError: SwitchTo instance has no call method

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

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

最佳答案

您使用了错误的选择器。您使用的选择器是 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")

关于python - 无法切换到帧——不断出现 AttributeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30289421/

相关文章:

python - 使用不同的预先计算的 bin 形状和频率渲染直方图

python - 第二个def上的语法错误

java - 大小写切换java编译错误

swift - enum 实现协议(protocol)时匹配 switch 中的 enum 值

python - Pyramid 流响应体

python - celery - errno 111 连接被拒绝

java - 使用 CSS : Selenium 按选择列表的内容查找 WebElement

c# - 元素不可点击,另一个元素接收点击 - Selenium C#

ruby - 不支持的命令行标志 : --ignore-certificate-errors (in Ruby)

swift - 小于或大于 Swift switch 语句