2016-03-24 9 views
1

Şu anda python ile öğrenme selenyum aşamasındayım. TakipPython ile Selenium'da dizin içeren bir çerçeve kümesi seçme

çalıştırmaya çalışırken kod im geçerli: bunu

browser=webdriver.Firefox() 
browser.maximize_window() 
browser.get('https://netbanking.hdfcbank.com') 
#print browser.page_source 

elems=browser.find_elements_by_tag_name('frameset') 
browser.switch_to_frame(elems[1]) 
browser.find_element(By.CSS_SELECTOR,"input[class='input_password']").send_keys('123456789'+Keys.ENTER) 

Ancak Im yapamaz ve hatayla biter. ardından pagesource i

/usr/bin/python2.7 /home/abhishek/PycharmProjects/Selenium/01_Selenium.py 
Traceback (most recent call last): 
    File "/home/abhishek/PycharmProjects/Selenium/01_Selenium.py", line 115, in <module> 
    browser.switch_to_frame(elems[1]) 
    File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 537, in switch_to_frame 
    self._switch_to.frame(frame_reference) 
    File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/switch_to.py", line 67, in frame 
    self._driver.execute(Command.SWITCH_TO_FRAME, {'id': frame_reference}) 
    File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 201, in execute 
    self.error_handler.check_response(response) 
    File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.NoSuchFrameException: Message: Element is not a frame element: FRAMESET 
Stacktrace: 
    at FirefoxDriver.prototype.switchToFrame (file:///tmp/tmpbrHNVJ/extensions/[email protected]/components/driver-component.js:10783) 
    at DelayedCommand.prototype.executeInternal_/h (file:///tmp/tmpbrHNVJ/extensions/[email protected]/components/command-processor.js:12614) 
    at DelayedCommand.prototype.executeInternal_ (file:///tmp/tmpbrHNVJ/extensions/[email protected]/components/command-processor.js:12619) 
    at DelayedCommand.prototype.execute/< (file:///tmp/tmpbrHNVJ/extensions/[email protected]/components/command-processor.js:12561) 

ardından Gördüğünüz hata olduğunu:

  1. Java'nın browser.swichTo için piton alternatif nedir (: Takip

    /usr/bin/python2.7 /home/abhishek/PycharmProjects/Selenium/01_Selenium.py 
    <html xmlns="http://www.w3.org/1999/xhtml"><head> 
    <title>Welcome to HDFC Bank NetBanking</title> 
    <script language="javascript"> 
        var daemon   = 'NETBANKING'; 
        var p_remoteaddress = ''; 
        var RsaAuthReq  = ''; 
    
        var l_path = window.location.pathname; 
    
        if(l_path == undefined || l_path == '' || l_path.indexOf("/netbanking") &lt; 0){ 
         window.location.href = window.location.protocol + "//" + window.location.host +"/netbanking"; 
        } 
    
    </script> 
    </head> 
        <frameset cols="*" rows="*" framespacing="0" frameborder="O" border="false"> 
         <frameset cols="*" rows="*,30" framespacing="0" frameborder="O" border="false"> 
          <frame scrolling="yes" noresize="true" src="RSLogin.html?v=2" name="login_page" marginheight="0" marginwidth="0" /> 
          <frame scrolling="no" noresize="true" src="footer.html" name="footer" marginheight="0" marginwidth="0" /> 
         </frameset> 
        </frameset> 
    
    </html> 
    

    şüphelerim vardır). Çerçeve (int arg0)?

  2. Webelementleri bir değişkende depolamanın ve indeksleri kullanarak gerekli değeri almak için doğru bir yaklaşım yolu var mı?

Nazik öğüt, Teşekkürler!

+0

hangi hata sizi verir? Ayrıca, 'By.CSS_SELECTOR' – n1c9

+0

@ n1c9 yerine' browser.find_element_by_css_selector 'kullanın ve hatayı ana açıklamaya ekledim. –

cevap

2

Java'nın browser.swichTo() için python alternatifi nedir? Frame (int arg0)?

Bu Python oldukça benzer:

number = 0 # first frame 
browser.switch_to.frame(number) 

bir değişkene webelements saklanması ve gerekli değeri doğru bir yaklaşım almak için endeksleri kullanmanın yolu mu?

Evet, elems içindeki elemanlar frame elemanları olacağını halinde çalıştık olabilir. Bu durumda

, aşağıdakileri yapabilirsiniz:

browser.switch_to.frame(0) 

ya:

browser.switch_to.frame("login_page") 
+0

Teşekkürler @alecxe! Aşağıdaki kuşkular: 1. Sayfa kaynağı başına giriş sayfasının ikinci (1. dizin) çerçeve kümesinin altına düştüğü zaman neden 0. dizinin burada işlediğini açıklayabilir misiniz? 2. Herhangi bir benzersiz tanımlayıcı switch_to.frame'de bir çerçeve referansı olarak kullanılabilir mi? –

+0

@abhisheknair giriş alanını içeren çerçeve, sayfadaki ilk çerçeve öğesidir ve indeksleme, 0 ile başlar. "Browser.switch_to.frame (...)" içinde 4 şey kullanabilirsiniz: 'name',' id' , dizin ve önceden yerleştirdiğiniz WebElement örneğini. Sonuncusu - yapmaya çalıştığınız şeydir, ama 'frameset' yerine, 'frame' elementlerini yerleştirmeliydin ... işte bu daha net hale getiriyor .. – alecxe

+0

Tekrar teşekkürler @alecxe !! :) –

İlgili konular