2016-11-29 2 views
0

[обновлений ниже]Нажмите не работает, но не показывает никаких ошибок

я пытаюсь нажать на результат из этого списка: http://www.imdb.com/find?ref_=nv_sr_fn&q=walking+dead&s=all

есть параметры я пытаюсь соответствовать, прежде чем поэтому я сначала найду элементы, затем попробую щелкнуть дочерний элемент того, который соответствует. в этом случае это будет первая ссылка для серии 2010 года

прямо сейчас у меня есть это, что не приводит к ошибке, но ссылка на самом деле не нажимается. может кто-то, пожалуйста, помогите мне понять это?

я получить список элементов результата

element = browser.find_elements_by_xpath('//td[contains(@class, "result_text")]') 

после фильтрации, первый результат это то, что я хочу. Элемент [0] - «The Walking Dead (2010) (сериал)». ссылка часть, которая находится путем поиска HREF

element = element[0].find_element_by_xpath('//a[contains(@href, "title")]') 
actions = ActionChains(browser) 
actions.click(element).perform() 

relevent element inspection

update1: element.click() не работает

Traceback (most recent call last): 
    File "U:\backup\references\python practice\episodes.py", line 41, in <module> 
    element.click() 
    File "C:\Python27\lib\site-packages\selenium-3.0.1-py2.7.egg\selenium\webdriver\remote\webelement.py", line 77, in click 
    self._execute(Command.CLICK_ELEMENT) 
    File "C:\Python27\lib\site-packages\selenium-3.0.1-py2.7.egg\selenium\webdriver\remote\webelement.py", line 494, in _execute 
    return self._parent.execute(command, params) 
    File "C:\Python27\lib\site-packages\selenium-3.0.1-py2.7.egg\selenium\webdriver\remote\webdriver.py", line 236, in execute 
    self.error_handler.check_response(response) 
    File "C:\Python27\lib\site-packages\selenium-3.0.1-py2.7.egg\selenium\webdriver\remote\errorhandler.py", line 192, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible 
    (Session info: chrome=54.0.2840.99) 
    (Driver info: chromedriver=2.25.426923 (0390b88869384d6eb0d5d09729679f934aab9eed),platform=Windows NT 6.1.7601 SP1 x86_64) 

Update2: пытался ожидание видимости элемента

element = browser.find_elements_by_xpath('//td[contains(@class, "result_text")]') 
elementchild = element[x].find_element_by_xpath('//a[contains(@href, "title")]') 
elementvisibility = WebDriverWait(browser, 60).until(
    EC.visibility_of_element_located((By.XPATH, '//a[contains(@href, "title")]')) 
) 
elementchild.click() 

, но я получаю исключения таймаута

Traceback (most recent call last): 
    File "U:\backup\references\python practice\episodes.py", line 44, in <module> 
    EC.visibility_of_element_located((By.XPATH, '//a[contains(@href, "title")]')) 
    File "C:\Python27\lib\site-packages\selenium-3.0.1-py2.7.egg\selenium\webdriver\support\wait.py", line 80, in until 
    raise TimeoutException(message, screen, stacktrace) 
selenium.common.exceptions.TimeoutException: Message: 

что странно, что элемент может быть найден с «elementchild ...» линии, но это не видно даже с 60-х годов таймер. может ли загрузка javascript намного медленнее?

+0

Ошибка из 'element.click()' это еще один вопрос - судя по ошибке, это выглядит как ссылка загружается через JavaScript и просто не делает существуют, когда вы вызываете метод 'click'. В качестве временного взлома для исследования попробуйте добавить 'time.sleep (3)', чтобы подождать 3 секунды перед 'click()'. Посмотрите, работает ли это и дайте мне знать. – That1Guy

+0

Я все еще получаю элемент не видимой ошибки. есть ли способ проверить, что эта ссылка загружается через javascript, прежде чем пытаться запустить скрипт? Кроме того, есть ли способ щелкнуть, не используя java? – baconpancakes

+0

Да, есть способ явно ожидать существования элемента. Как вы запускаете свой скрипт? Работает ли он без головы или вы можете смотреть браузер во время работы скрипта? – That1Guy

ответ

0

Вместо использования ActionChains просто вызовите click метод element:

element = element[0].find_element_by_xpath('//a[contains(@href, "title")]') 
element.click() 

Если элемент загружается после страницы и не могут быть найдены сразу, вы можете явно ждать элемент должен присутствовать до, вызывающий метод click.

Вот пример из this answer:

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

driver = webdriver.Chrome() # CHANGEME 
driver.get('http://www.quora.com/Kevin-Rose') 
element = WebDriverWait(driver, 2).until(
    EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "Followers")) 
) 
element.click() 
+0

'presence_of_element_located' по-прежнему дает мне элемент невидимым, поэтому я думаю, что мне нужно 'visibility_of_element_located ', но есть ли способ использовать мой предыдущий элемент [0]', как это было в элементе element = element [0] .find_element_by_xpath ('// a [содержит (@href, «title»)]') '? У меня есть «EC.visibility_of_element_located ((By.XPATH, '// a [содержит (@href,« title »)]')) ', но я не знаю, как сочетаться с' element [0] ' – baconpancakes

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