Python selenium 我无法访问带有 iframe 的页面上的链接页面

Python selenium I can't acess to a linked page on a page with iframe

我想通过单击 'Régional féminin U15' 从这个页面转到这个 https://resultats.ffbb.com/organisation/b5e6211d5970.html to this page https://resultats.ffbb.com/championnat/b5e6211f621a.html?r=200000002810394&d=200000002911791&p=2。 我尝试了很多解决方案,但我所拥有的最好的解决方案并没有系统地工作。 你能帮帮我吗?

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

driver = webdriver.Firefox()
driver.get("https://resultats.ffbb.com/organisation/b5e6211d5970.html")

driver.switch_to.frame("idIframeChampionnat")
#sign_in = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '/html/body/pre/span[93]'))).click();

button = driver.find_element_by_partial_link_text(u"minin U15")
button.click()```

尝试

driver.switch_to.frame("idIframeChampionnat")
button = driver.find_element_by_xpath("//a[contains(text(), 'minin U15')]")
button.click()

driver.switch_to.frame("idIframeChampionnat")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[contains(text(), 'minin U15')]"))).click()

这是我在 groovy 中的代码示例(抱歉,没有 python env),与您的非常相似,即使没有超时,它也能完美地循环运行 20 次。

    @Test(invocationCount = 20)
    void test() {
        driver.get('https://resultats.ffbb.com/organisation/b5e6211d5970.html')
        driver.switchTo().frame(
                driver.findElement(By.xpath("//iframe[@id='idIframeChampionnat']"))
        )
        driver.findElement(By.xpath("//a[contains(text(), 'minin U15')]")).click()
        driver.switchTo().defaultContent()
        assert driver.getCurrentUrl() ==
                'https://resultats.ffbb.com/championnat/b5e6211f621a.html?r=200000002810394&d=200000002911791&p=2'
    }

所以,我没有想法。也许点击后添加driver.switch_to.default_content()

on the link with text as Régional féminin U15 as the elements are within an 所以你必须:

  • 诱导 WebDriverWait 所需的 帧可用并切换到它

  • 诱导 所需的 元素可点击

  • 您可以使用以下任一项:

    • 使用CSS_SELECTOR:

      driver.get("https://resultats.ffbb.com/organisation/b5e6211d5970.html")
      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe#idIframeChampionnat")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Régional féminin U15"))).click()
      
    • 使用 XPATH:

      driver.get("https://resultats.ffbb.com/organisation/b5e6211d5970.html")
      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='idIframeChampionnat']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Régional féminin U15"))).click()
      
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 浏览器快照:


参考

您可以在以下位置找到一些相关讨论:

  • Switch to an iframe through Selenium and python