2015-05-17 5 views
3

мое первое сообщение. Приносим извинения заранее за любые промахи.Невозможно переключиться в рамки - продолжайте получать AttributeError

Я пишу на Python, используя Selenium, пытаясь очистить некоторую информацию с некоторых веб-страниц.

Я не могу решить эту головоломку после двух дней поиска-поиска.

Моя проблема в этом; при попытке войти на сайт w/Selenium/Python, я не могу «найти элемент» для входа. После долгих поисков я понимаю, что мне может понадобиться переключить кадры, чтобы найти элемент. Я попытался switchTo (или switch_to) приказываю многие различные способы - и я получаю сообщение

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

Я вывешу самый последнюю попытку (пожалуйста, дайте мне знать, если я могу предоставить любую дополнительную информацию):

в селеном:

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 

Большое спасибо за любые идеи или рекомендации !!!

ответ

1

Вы используете неправильный селектор. Селектор вы используете CSSSelector, но НЕ идентификатор

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

'browser.switch_to.frame (browser.find_element_by_id ('loginsubtab')) browser.switch_to.frame (browser.find_element_by_id ('credentials')) 'Yo! Оно работает!!!!!!!! Большая большая любовь к тебе. Спасибо!!! – Christine

+0

@ Saifur - прежде чем идти, как только я доберусь до следующей страницы, мне нужно переключиться обратно? и если бы я остался на той же странице, я бы просто сделал switch_from.? – Christine

+0

Да, на той же странице вам нужно вернуться к исходному кадру. Вам нужно использовать 'driver.switch_to.default_content'. См. [Doc] (https://selenium-python.readthedocs.org/api.html?highlight=frame#selenium.webdriver.remote.webdriver.WebDriver.switch_to_default_content) – Saifur

0

Во-первых, это выглядит не так:

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

Поскольку вы ищете элемент по ID, вам не нужно включать iframe[id="..."]

попробовать:

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

Спасибо! Я попробовал ваше предложение и возвратил ту же ошибку //browser.switch_to().frame(browser.findElement(By.ID('credentials '))) AttributeError: экземпляр SwitchTo не имеет метода __call__ // – Christine

+0

@Christine Вы просто не нужно скобки после switch_to – user502144

Смежные вопросы