我切换到带有硒的框架内的框架,并且访问了该框架,但是我无法使用find_element_by_tag_name
或find_element_by_xpath
在框架内找到元素,我确定该元素存在,但是我找不到它并用硒单击它。
页面> frame1(元素:复选框)> frame2(元素:imgs,按钮)
[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()
错误消息:
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element
我使用了find_element_by_tag_name
,在此之前我尝试了XPATH,但它有相同的错误。
我努力向别人解释我不擅长的一切,所以我希望你能理解我,并请告诉我该怎么做:(。
URL为:reCAPTCHA demo
由于您尚未发布url,因此我们不知道该元素是否存在,但是如果是,则可以尝试等待其加载。解释了here
reCAPTCHA demo页面中的checkbox元素在<iframe>
内,因此要在checkbox上调用click()
,您必须:
frame_to_be_available_and_switch_to_it()
。下一步,单击提交按钮:
default_content
default_content
。您可以使用以下基于element_to_be_clickable()
的xpath:
代码块:
Locator Strategies
注:您必须添加以下导入:
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音频按钮,您可以使用以下定位器策略:
Multiple iframe tags Selenium webdriver
您可以在
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()
中找到相关的详细讨论