如何使用selenium和python访问弹出模式iframe中的元素

如何使用selenium和python访问弹出模式iframe中的元素,python,selenium,selenium-webdriver,iframe,Python,Selenium,Selenium Webdriver,Iframe,我尝试单击页面上的另一个按钮时动态显示的输入。我可以看到输入包含在iframe标记中,并尝试将selenium与浏览器一起使用。切换到.frame()(其中浏览器是我的webdriver对象)。无论我使用帧的id或帧的对象(selenium可以找到)或帧的索引,我都会收到下面的错误消息 我试图等待以确保弹出窗口在网页上可见并处于活动状态。我可以将帧切换到页面中的其他4个iFrame而不会出现问题 我当前的代码如下所示: time.sleep(5) frames =

我尝试单击页面上的另一个按钮时动态显示的输入。我可以看到输入包含在iframe标记中,并尝试将selenium与
浏览器一起使用。切换到.frame()
(其中浏览器是我的webdriver对象)。无论我使用帧的id或帧的对象(selenium可以找到)或帧的索引,我都会收到下面的错误消息 我试图等待以确保弹出窗口在网页上可见并处于活动状态。我可以将帧切换到页面中的其他4个iFrame而不会出现问题

我当前的代码如下所示:

        time.sleep(5)
        frames = self.browser.find_elements(*(By.XPATH, '//iframe'))
        if frames[4].is_displayed(): 
            print("frame is displayed")
        wait(self.browser, 10).until(EC.frame_to_be_available_and_switch_to_it(frames[4]))
"iframe id="QuickPopupIframe" style="width:100%;height:100%;border:none" src="../Reference_Priority/Reference-Priority-QuickSelector.aspx?Target=ctl00_PageContent_PriorityCode&amp;Formula=MVufX1PgieR56FP4ih%2fB7DmXUWVgW2K7F61ffR%2bNCiA%3d&amp;IndexField=SYGQ1ZIIAsXlmKS73s9dbg%3d%3d&amp;EmptyValue=VMGNuzfo24fWSZTXc2WIC9A6qT5R5C0gEgrksjxUk3M%3d&amp;EmptyDisplayText=PsbWe8ErKzHmHOECyYwb2dswos6g1dh5dGzsQ%2fORFos%3d&amp;Mode=F7zc4UXA5KrLE%2bF%2b%2fEj%2bx335yFqXWI8TM9%2fceff20ZA%3d&amp;RedirectStyle=pIzLWXDCgKbu9KF0MLvFEg%3d%3d"></iframe"
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x036DC628>
response = {'status': 404, 'value': '{"value":{"error":"no such window","message":"no such window\\n  (Session info: chrome=81.0....\n\\tBaseThreadInitThunk [0x76FE8494+36]\\n\\tRtlAreBitsSet [0x77424328+136]\\n\\tRtlAreBitsSet [0x774242F8+88]\\n"}}'}
这是元素(没有开始和结束标记):

        time.sleep(5)
        frames = self.browser.find_elements(*(By.XPATH, '//iframe'))
        if frames[4].is_displayed(): 
            print("frame is displayed")
        wait(self.browser, 10).until(EC.frame_to_be_available_and_switch_to_it(frames[4]))
"iframe id="QuickPopupIframe" style="width:100%;height:100%;border:none" src="../Reference_Priority/Reference-Priority-QuickSelector.aspx?Target=ctl00_PageContent_PriorityCode&amp;Formula=MVufX1PgieR56FP4ih%2fB7DmXUWVgW2K7F61ffR%2bNCiA%3d&amp;IndexField=SYGQ1ZIIAsXlmKS73s9dbg%3d%3d&amp;EmptyValue=VMGNuzfo24fWSZTXc2WIC9A6qT5R5C0gEgrksjxUk3M%3d&amp;EmptyDisplayText=PsbWe8ErKzHmHOECyYwb2dswos6g1dh5dGzsQ%2fORFos%3d&amp;Mode=F7zc4UXA5KrLE%2bF%2b%2fEj%2bx335yFqXWI8TM9%2fceff20ZA%3d&amp;RedirectStyle=pIzLWXDCgKbu9KF0MLvFEg%3d%3d"></iframe"
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x036DC628>
response = {'status': 404, 'value': '{"value":{"error":"no such window","message":"no such window\\n  (Session info: chrome=81.0....\n\\tBaseThreadInitThunk [0x76FE8494+36]\\n\\tRtlAreBitsSet [0x77424328+136]\\n\\tRtlAreBitsSet [0x774242F8+88]\\n"}}'}

“iframe id=“QuickPopupIframe”style=“宽度:100%;身高:100%;边框:none“src=“../Reference\u Priority/Reference Priority QuickSelector.aspx?Target=ctl00\u PageContent\u PriorityCode&;公式=MVufX1PgieR56FP4ih%2fB7DmXUWVgW2K7F61ffR%2BCNIA%3d&;IndexField=SYGQ1ZIIAsXlmKS73s9dbg%3d%3d&;EmptyValue=VMGNuzfo24fWSZTXc2WIC9A6qT5R5C0gEgrksjxUk3M%3d&;EmptyDisplayText=psbwe8erkzhmhoecywb2dswos6g1dh5dgzsq%2用于FOS%3d&;模式=F7zc4UXA5KrLE%2bF%2b%2fEj%2bx335yFqXWI8TM9%2FCEF20ZA%3d&;RedirectStyle=pIzLWXDCgKbu9KF0MLvFEg%3d%3d“>尝试
驱动程序。切换到.frame
而不是
frame\u to\u be\u available\u并切换到它

time.sleep(5)
frames = wait(self.browser, 10).until(EC.presence_of_all_elements_located((By.XPATH,"//iframe")))
if frames[4].is_displayed(): 
    print("frame is displayed")
    #wait(self.browser, 10).until(EC.frame_to_be_available_and_switch_to_it(frames[4]))
self.browser.switch_to.frame(frames[4])

我也尝试了driver.switch_to.frame,得到了同样的消息。谢谢你的建议。@Jamie Kook我更新了答案以帮助排除故障。我想
frames[4]
可能不是正确的索引。