我切换到带有硒的框架内的框架,我访问了该框架,但我无法使用find_element_by_tag_name
或找到框架内的元素find_element_by_xpath
,我确定该元素存在,但我无法找到它并使用硒单击它。
页面
frame2中有我想点击的按钮,复选框点击后显示frame2。这是我的代码:
driver = webdriver.Firefox(r"C:\Users\[profilename]\Desktop\devloper\selenium\gecko")
driver.get(url)
sleep(10) #to make sure that everything loaded
#the first frame (success to access and clicked):
driver.switch_to.frame(0)
click1 = driver.find_element_by_xpath("//*[@id=\"anchor\"]")
click1.click()
sleep(5) #to make sure that everything loaded
iframe = driver.find_element_by_tag_name("iframe")
driver.switch_to.frame(iframe)
sleep(3)
frame2_element = driver.find_element_by_tag_name("button")
frame2_element.click()
错误msg:
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element
我使用find_element_by_tag_name
之前,我尝试XPATH,它有同样的错误。
我努力解释一切,我不擅长向人们解释事情,所以我希望你理解我,请告诉我该怎么做:(。
网址是:reCAPTCHA演示
reCAPTCHA演示页面中的复选框元素位于中
frame_to_be_available_and_switch_to_it()
。接下来,单击提交按钮:
default_content
element_to_be_clickable()
。您可以使用以下基于xpath的定位器策略:
>
代码块:
driver.get("https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox-explicit.php")
WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[starts-with(@src, 'https://www.google.com/recaptcha/api2/anchor')]")))
WebDriverWait(driver, 20).until(EC.invisibility_of_element_located((By.XPATH, "//div[@class='recaptcha-checkbox-spinner-overlay']")))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='recaptcha-checkbox-border']"))).click()
driver.switch_to.default_content()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='form-field']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
您可以在以下链接中找到一些相关的讨论:
根据您最近的评论更新这个元素,我想单击//*[@id="recaptcha-audio-button"]单击reCAPTCHA音频按钮,您可以使用以下定位器策略:
driver.switch_to.default_content()
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[title='recaptcha challenge']")))
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button#recaptcha-audio-button"))).click()
您可以在如何单击iframe中的元素以使用Selenium和Python通过音频启用验证码中找到相关的详细讨论
由于你还没有发布url,我们不知道元素是否存在,但是如果存在,你可以尝试等待它加载。这里解释