使用Selenium Python单击按钮尝试了许多使用xpath和css选择器的方法,但没有成功

2024-09-26 17:47:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图单击这个button在Python中用Selenium以黄色突出显示

从本网页: https://www.femina.fr/article/jeu-concours-spartoo-decembre-2020

我已通过cookies和允许/阻止通知弹出窗口

我尝试在普通窗口(?),我的意思是我不是在无头模式下尝试

使用Chrome和Firefox webdriver进行了尝试:结果相同

我尝试了以下所有方法,但都没有成功:

driver.find_element_by_xpath("//input[@value='Jouer et s'inscrire !']").click()

driver.find_element_by_xpath("//input[@type='submit' and @value='Etape suivante']").click()

driver.find_element_by_xpath("//button[contains(., 'Jouer et s'inscrire !')]").click()

driver.find_element_by_xpath("//*[@id='jouerBtn']").click()

driver.find_element_by_xpath("/html/body/div[1]/div[3]/div/form/input[3]").click()

driver.find_element_by_css_selector("[type=submit]").click()

我做错了什么


Tags: divinputbyvaluetypedriverbuttonelement
3条回答

您要查找的按钮位于<iframe>内,在执行find_element_by_xpath操作之前,必须首先切换到该按钮:

driver.switch_to.frame('qualifio-0136862F-D302-43A1-A613-F291B4D70337')

找到按钮的最简单方法是:

driver.find_element_by_id('jouerBtn')

下面的XPath是正确的

driver.find_element_by_xpath("//*[@id='jouerBtn']").click()

driver.find_element_by_xpath("/html/body/div[1]/div[3]/div/form/input[3]").click()

以下XPath/CSS不正确

driver.find_element_by_xpath("//input[@value='Jouer et s'inscrire !']").click()

driver.find_element_by_xpath("//input[@type='submit' and @value='Etape suivante']").click()

driver.find_element_by_xpath("//button(contains(., 'Jouer et s'inscrire!')]").click() 
driver.find_element_by_css_selector("[type=submit]").click()

元素(按钮)不在屏幕的可见区域中。因此,在单击之前,应将元素带入可见区域

位置语法的更正

driver.find_element_by_xpath("//input[@value=\"Jouer et s'inscrire !\"]").click()

driver.find_element_by_xpath("//input[@type='button' and @value=\"Jouer et s'inscrire !\"]").click()

driver.find_element_by_xpath("//input[contains(@value, 'Jouer et s')]").click() 
driver.find_element_by_css_selector("[type='button']").click()

元素焦耳和s'inscrire位于<iframe>内,因此您必须:

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

  • 诱导WebDriverWait使所需的元素可单击

  • 您可以使用以下任一Locator Strategies

    • 使用CSS_SELECTOR

      driver.get('https://www.femina.fr/article/jeu-concours-spartoo-decembre-2020')
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button#didomi-notice-agree-button>span"))).click()
      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[id^='qualifio']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#jouerBtn"))).click()
      
    • 使用XPATH

      driver.get('https://www.femina.fr/article/jeu-concours-spartoo-decembre-2020')
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[contains(., 'accepte')]"))).click()
      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[starts-with(@id, 'qualifio')]")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='jouerBtn']"))).click()
      
  • 注意:您必须添加以下导入:

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

femina_france


参考文献

您可以在以下内容中找到一些相关讨论:

相关问题 更多 >

    热门问题