2015-10-13 8 views
3

Задача Мне нужно войти в верхний профиль пользователя в этом page, используя Selenium. Профиль Топ-пользователей находится в правой части страницы.Нажмите, чтобы просмотреть больше страниц с Selenium in Python

Что я сделал

self.driver.get(response.url) 
    user_list = self.driver.find_elements_by_xpath('//table[contains(@class,"W-100 Bc-c")]/tbody/tr') 
    for single_user in user_list: 
     single_user.find_element_by_xpath('.//td/a').click() 
     time.sleep(3) 

Но я получаю сообщение об ошибке:

WebDriverException: Message: unknown error: Element is not clickable at point (865, 685). Other element would receive the click:

<div id="MouseoverMask" class="End-0 Start-0 T-0 B-0"></div> 

Информация Python 2.7.10 Селен 2,48 PyCharm

EDIT +

Я пытаюсь сделать печать имя, и она работает:

print(str(single_user.find_element_by_xpath('.//td/a').text)) 

Но щелчок() нет.

+2

Итак, что произойдет, если вы запустите это? Какая ошибка? – Noxeus

+3

Ваш xpath выглядит нормально, так где же проблема? –

+1

WebDriverException: Сообщение: неизвестная ошибка: элемент не кликается в точке (865, 685). Другой элемент получит клик:

RedVelvet

ответ

0

Я не вижу никакой ошибки в моем конце, но после того, как пихты t нажмите веб-элементы: изменен, так что вы не получите следующий веб-элемент, который был записан ранее в xpath. Кстати, попробуйте под кодом

from selenium import webdriver 
import time 
driver = webdriver.Firefox() 
driver.get('https://answers.yahoo.com/dir/index/discover?sid=396545663') 
user_list = driver.find_elements_by_xpath('//table[contains(@class,"W-100 Bc-c")]/tbody/tr') 
lnks = [i.find_element_by_xpath('.//td/a').get_attribute('href') for i in user_list] 
for single_user in lnks: 
    driver.get(single_user) 
    time.sleep(3) 
1

, если вы уверены, что объект, который вы получаете право один, часто проблема:

  • Объект не виден
  • Страница не была полностью загружена при попытке нажать на объект.

Так просто взгляните на метод Wait предоставленный селеном и убедитесь, что ваш объект виден

Для того, чтобы ждать элемента, чтобы быть интерактивными:

from selenium.webdriver.support import expected_conditions as EC 

wait = WebDriverWait(driver, 10) 
element = wait.until(EC.element_to_be_clickable((By.ID,'someid'))) 

В вашем случае, вы можете попытаться найти каждый элемент с идентификатором вы получили и нажмите на него:

self.driver.get(response.url) 
user_list = self.driver.find_elements_by_xpath('//table[contains(@class,"W-100 Bc-c")]/tbody/tr') 
for single_user in user_list: 
    id = single_user.find_element_by_xpath('.//td/a').get_attribute("id") 
    self.driver.find_elements_by_id(id).click() 
    time.sleep(3) 
+0

Да объект является видимым и прежде чем я подожду около 5 секунд. – RedVelvet

+0

Вы пытались подождать как форму, которую я только что добавил в свой пост? – Hayha

+0

С wait = WebDriverWait (self.driver, 10) element = wait.until (EC.element_to_be_clickable ((By.ID, 'ya-leader-board'))) – RedVelvet