Selenium页面源是缺少元素

时间:2016-07-16 16:51:23

标签: python selenium captcha recaptcha hidden

我有一个基本的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"。所以我想重新解释一下我的问题,如何提取隐藏元素的值。

1 个答案:

答案 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()