Python中的Selenium:与reCAPTCHA交互后,button元素似乎消失了。世界卫生大会?

时间:2018-01-31 17:10:51

标签: python selenium xpath recaptcha

我尝试与需要输入用户名和密码的页面进行交互,然后需要点击reC​​APTCHA然后点击登录按钮。输入用户名和密码并单击reCAPTCHA工作正常,但在与reCAPTCHA交互后,Selenium似乎无法使用登录按钮元素。问题是,在交互reCAPTCHA之前,Selenium 很容易找到登录按钮元素。发生了什么事?

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait

driver = webdriver.Firefox()
driver.get("https://localbitcoins.com/accounts/login/")
time.sleep(2)
element = driver.find_element_by_name("username")
element.send_keys("username")
element = driver.find_element_by_name("password")
element.send_keys("passcode")
time.sleep(1)
# reCAPTCHA
wait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_xpath('//iframe[contains(@src, "google.com/recaptcha")]')))
wait(driver, 10).until(EC.element_to_be_clickable((By.ID, "recaptcha-anchor"))).click()
# login button
elements = driver.find_elements_by_xpath("//button[contains(text(), 'Login')]")
elements[0].click()

1 个答案:

答案 0 :(得分:2)

为了能够处理“登录”按钮,您必须在与iframe进行交互后从# reCAPTCHA wait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_xpath('//iframe[contains(@src, "google.com/recaptcha")]'))) wait(driver, 10).until(EC.element_to_be_clickable((By.ID, "recaptcha-anchor"))).click() # Switch to default content driver.switch_to.default_content() # login button elements = driver.find_elements_by_xpath("//button[contains(text(), 'Login')]") elements[0].click() 切换回来:

time.sleep(1)

P.S。请注意,wait(driver, 10)之前无需使用wait(driver, 15)。如果您需要更多时间等待 - 只需增加超时,例如add_filter( 'user_can_richedit', 'disable_my_richedit' ); function disable_my_richedit( $default ) { global $post; if(!empty($post)){ if ( in_array( $post->ID, array(19909,20148,20150) ) ) return false; return $default; } }