【问题标题】:handling frames with selenium in python在 python 中使用 selenium 处理帧
【发布时间】:2020-04-10 17:29:08
【问题描述】:

我是使用 selenium 的新手,我目前正在努力收集登录背后和框架内的一些数据(底部的 html)。我要收集的数据在代码的“#document”部分,有人能解释一下如何获取吗?

我不清楚这是否在"MembersHostFrame" 内?

我需要使用这个代码吗 -

driver.switch_to.default_content()
driver.switch_to.frame("MembersHostFrame")

【问题讨论】:

    标签: python selenium iframe frame


    【解决方案1】:

    您可以使用下面的代码来切换到框架。

    iframe=driver.find_element_by_id("MemberHostFrame")
    driver.switch_to.frame(iframe)
    

    您可以使用以下代码切换回主窗口:

    driver.switch_to.default_content()
    

    更新部分以等待存在帧:

    wait = WebDriverWait(driver, 20)
    wait.until(EC.presence_of_element_located((By.ID, "MemberHostFrame")))
    

    注意:: :: 请将以下导入添加到您的解决方案中

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    

    工作代码:

    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium import webdriver
    driver = webdriver.Chrome(executable_path=r"path for chromedriver.exe")
    driver.maximize_window()
    wait = WebDriverWait(driver, 10)
    driver.get("https://members.bet365.com/members/services/host?Microsite=Members&MrsReq=True&DisplayMode=Desktop&prdid=1&platform=1&lng=1&mh=2&ptqs=%2Fhe%2FAuthenticated%2FHistory%2FDisplay%2F%3Frt%3D2%26ht%3D4")
    
    WebDriverWait(driver, 30).until(
                    EC.presence_of_all_elements_located((By.ID, "MembersHostFrame")))
    iframe=driver.find_element_by_tag_name("iframe")
    driver.switch_to.frame(iframe)
    wait.until(EC.element_to_be_clickable((By.NAME, "ctl00$Main$login$UserName"))).send_keys("Example123")
    

    输出:

    【讨论】:

    • 收到此错误消息NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="MemberHostFrame"]"} (Session info: chrome=80.0.3987.163)
    • Coule be 网站加载 iframe 需要时间,您能提供您的网站吗?我会相应地更新你
    • 这是网站 - members.bet365.com/members/services/… - 但它在登录后...
    • @Joe :请找到有效的解决方案部分,一旦您确认您是否愿意接受答案并从您的最后点击投票按钮。
    【解决方案2】:

    我认为这应该回答您的问题。 Select iframe using Python + Selenium

    您需要切换到 iframe,然后找到该元素。你的假设是正确的。根据提供的链接中的评论,您可能需要使用 xpath 从 iframe 中获取数据。

    【讨论】:

      【解决方案3】:

      要访问iframe 中的元素,您需要先切换到iframe

      诱导WebDriverWait() 并等待frame_to_be_available_and_switch_to_it() 并使用IDNameXpathcss 选择器。

      ID:

      WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"MembersHostFrame")))
      

      姓名:

      WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME,"MembersHostFrame")))
      

      Xpath

      WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='MembersHostFrame']")))
      

      CSS 选择器:

      WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"#MembersHostFrame")))
      

      您需要导入以下库。

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      

      【讨论】:

        猜你喜欢
        • 2020-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-20
        相关资源
        最近更新 更多