提问者:小点点

如何使用Selenium和Python在reCAPTCHA演示页面上的多个框架内查找和交互多个元素


我切换到带有硒的框架内的框架,我访问了该框架,但我无法使用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演示


共2个答案

匿名用户

reCAPTCHA演示页面中的复选框元素位于

  • Induce WebDriver等待所需的frame_to_be_available_and_switch_to_it()

接下来,单击提交按钮:

  • 您需要切换到default_content
  • Induce WebDriver等待所需的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
    

    您可以在以下链接中找到一些相关的讨论:

    • 多个iframe标签Selenium网络驱动程序

    根据您最近的评论更新这个元素,我想单击//*[@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,我们不知道元素是否存在,但是如果存在,你可以尝试等待它加载。这里解释