我有一个基本的Selenium脚本,它使用了chromedriver二进制文件。我试图在其上显示带有recaptcha的页面,然后挂起直到答案完成,然后将其存储在变量中以备将来使用。
我遇到的障碍是我无法找到重新元素。
#!/bin/env python2.7
import os
from selenium import webdriver
driverBin=os.path.expanduser("~/Desktop/chromedriver")
driver=webdriver.Chrome(driverBin)
driver.implicitly_wait(5)
driver.get('http://patrickhlauke.github.io/recaptcha/')
是否有任何特殊需要才能看到这个元素?
还有一种方法可以在用户解决后抓取令牌而不刷新页面吗?
现在,隐藏了recaptcha-token id的输入类型。解决后,创建第二个recaptcha-token id。这是我希望存储在变量中的值。我正在考虑使用该id检查已找到元素长度的循环。如果大于1解析。但我不确定源本身是否更新。
更新:
通过更多的研究,它与元素的本质有关,特别是:使用标记:<input type="hidden"
。所以我想重新解释一下我的问题,如何提取隐藏元素的值。
答案 0 :(得分:1)
您要查找的元素(input
)位于iframe中。在找到元素并与之交互之前,您需要切换到iframe。
import os
from selenium import webdriver
driver=webdriver.Chrome()
try:
driver.implicitly_wait(5)
driver.get('http://patrickhlauke.github.io/recaptcha/')
# Find the iframe and switch to it
iframe_path = '//iframe[@title="recaptcha widget"]'
iframe = driver.find_element_by_xpath(iframe_path)
driver.switch_to.frame(iframe)
# Find the input element
input_elem = driver.find_element_by_id("recaptcha-token")
print("Found the input element: ", input_elem)
finally:
driver.quit()