[英]Clicking button with Selenium Python tried many ways with xpath and css selector without success
我正在尝试单击 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()
我究竟做错了什么?
您要查找的按钮位于<iframe>
中,您必须先切换到该按钮才能执行find_element_by_xpath
:
driver.switch_to.frame('qualifio-0136862F-D302-43A1-A613-F291B4D70337')
然后找到按钮的最简单方法是:
driver.find_element_by_id('jouerBtn')
Jouer et s'inscrire 元素! 位于<iframe>
内,因此您必须:
诱导WebDriverWait使所需的帧可用并切换到它。
诱导WebDriverWait使所需元素成为可点击的。
您可以使用以下任一定位器策略:
使用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
浏览器快照:
您可以在以下位置找到一些相关的讨论:
以下 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()
以下 XPaths/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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.