如何使用Selenium和Python在reCAPTCHA演示页面上找到多个框架内的多个元素并与之交互。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Selenium和Python在reCAPTCHA演示页面上找到多个框架内的多个元素并与之交互。相关的知识,希望对你有一定的参考价值。
我换到了一个框架里面的硒,我访问到了那个框架,但是我无法找到框架里面的元素,用 find_element_by_tag_name
或 find_element_by_xpath
我确信这个元素是存在的,但我找不到它,也无法用硒来点击它。
page > frame1(elements: checkbox) > frame2(elements: imgs , buttons)
在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演示 页面在一个 <iframe>
以此来调用 click()
在...上 复选框 你必须。
- 诱导 WebDriverWait 为所欲为
frame_to_be_available_and_switch_to_it()
.
接下来,要点击 提交 按钮。
- 你需要 转入
default_content
- 诱导 WebDriverWait 为所欲为
element_to_be_clickable()
.
解决办法
代码块。
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"] 点击 重新验证码音频按钮 您可以使用以下方法 定位策略:
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()
你可以在以下网站找到相关的详细讨论 如何使用Selenium和Python点击iframe中的元素,通过音频启用验证码。
由于你没有发布url,我们不知道该元素是否存在,但如果存在,你可以尝试等待它加载。它的解释是 此处
以上是关于如何使用Selenium和Python在reCAPTCHA演示页面上找到多个框架内的多个元素并与之交互。的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Selenium和Python在网站内的页面中导航?
如何在 python 中使用 Selenium 和 Beautifulsoup 解析网站? [关闭]