2015-08-26 7 views
2

Я тестирую свое приложение с помощью tumblr, и мне нужно войти в систему и выйти, когда я проходил процедуры. Во время этого у меня возникли проблемы с щелчком флажка, который появляется. Как я могу использовать selenium-webriver в python, чтобы щелкнуть его?Невозможно установить флажок с selenium-webdriver

enter image description here

from selenium import webdriver 
from selenium.webdriver.common.action_chains import ActionChains 
from selenium.webdriver.common.keys import Keys 
from selenium.common.exceptions import NoSuchElementException 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.by import By 
import time 
import sys 
import smtplib 

email = "[email protected]" 
pswd = "xxxxx" 

driver = webdriver.Firefox() 
actions = ActionChains(driver) 


driver.get("https://www.tumblr.com/login") 
driver.find_element_by_id("signup_email").send_keys(email) 
driver.find_element_by_id("signup_password").send_keys(pswd) 
driver.find_element_by_id("signup_forms_submit").click() 


#wait = WebDriverWait(driver, 5) 


time.sleep(5) 


try: 
    #checkbox = driver.find_element_by_id("recaptcha-anchor") 
    #checkbox = driver.find_element_by_id("g-recaptcha") 
    #checkbox.click() 
    box = driver.find_element_by_xpath("//*[@id='recaptcha-token']") 
    #box = driver.find_element_by_css_selector("#recaptcha-anchor") 
    print(box.location, box.size) 
    box.click() 
    #actions.move_to_element(box) 
    actions.click(box) 
    #actions.perform() 
except NoSuchElementException as e: 
    print(e) 
    pass 

(EDIT) Моя ошибка читает:

Traceback (most recent call last): File "tumblrtest.py", line 49, in <module> EC.element_to_be_clickable((By.ID, "recaptcha-anchor")) File "/Library/Python/2.7/site-packages/selenium/webdriver/support/wait.py", line 76, in until raise TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message: Stacktrace: at FirefoxDriver.prototype.findElementInternal_ (file:///var/folders/13/1rh6kf9x2k11pyfg6zsnfmg40000gn/T/tmpvkFkz_/extensions/[email protected]/components/driver-component.js:10667) at FirefoxDriver.prototype.findElement (file:///var/folders/13/1rh6kf9x2k11pyfg6zsnfmg40000gn/T/tmpvkFkz_/extensions/[email protected]/components/driver-component.js:10676) at DelayedCommand.prototype.executeInternal_/h (file:///var/folders/13/1rh6kf9x2k11pyfg6zsnfmg40000gn/T/tmpvkFkz_/extensions/[email protected]/components/command-processor.js:12643) at DelayedCommand.prototype.executeInternal_ (file:///var/folders/13/1rh6kf9x2k11pyfg6zsnfmg40000gn/T/tmpvkFkz_/extensions/[email protected]/components/command-processor.js:12648) at DelayedCommand.prototype.execute/< (file:///var/folders/13/1rh6kf9x2k11pyfg6zsnfmg40000gn/T/tmpvkFkz_/extensions/[email protected]/components/command-processor.js:12590)

Это была моя ошибка в Chrome: Traceback (most recent call last): File "tumblrtest.py", line 49, in <module> EC.element_to_be_clickable((By.ID, "recaptcha-anchor")) File "/Library/Python/2.7/site-packages/selenium/webdriver/support/wait.py", line 76, in until raise TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message:

... ничего не была нажата. : \

+0

Какой флажок установлен, который вы пытаетесь нажать? Это не ясно из вашего описания. «INPUT», который вы пытаетесь щелкнуть по вашему коду (id = recaptcha-токен), скрыт, поэтому Selenium не будет взаимодействовать с ним по дизайну. – JeffC

+0

@JeffC ... пришел к выводу, что «recaptcha-anchor» был целевым значением. – marriedjane875

ответ

4

Нажмите recaptcha-anchor вместо:

driver.find_element_by_id("recaptcha-anchor").click() 

Вы также должны wait for the element to be clickable before performing an action:

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

recaptcha_anchor = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "recaptcha-anchor")) 
) 
recaptcha_anchor.click() 
+0

Он не нажимает. Я использовал ваш точный код ... – marriedjane875

+0

@ marriedjane875 Что происходит точно? Вы получаете какие-либо ошибки? Можете ли вы поделиться полным кодом, который у вас есть до сих пор (и, если возможно, включить ссылку на веб-сайт)? Благодаря! – alecxe

+0

Я добавил весь мой код выше и добавил ошибку в редактировании. Спасибо миллиону :) – marriedjane875

0

Find ReCaptcha checbox с

recaptcha = self.driver.find_element_by_xpath("//*[@role='presentation']"); time.sleep(random.uniform(2, 5)) 

затем нажмите его

recaptcha.click(); time.sleep(random.uniform(1, 1)) 

Этот метод в настоящее время работает.

+0

Пожалуйста, добавьте некоторые пояснения к вашему коду! –

+0

Пожалуйста, добавьте некоторое объяснение в свой ответ! –

Смежные вопросы