2013-05-22 4 views
0

Я пытаюсь получить данные из чего-то, что выглядит следующим образом:мой XPath не работает

<html> 
<table> 
    <tr> 
    <td> 
    <div> 
    <tr> 
    <td> 
    <div> 

Я думаю, что это в основном то, что я смотрел на ранее, так что я сделал $x('//table/tr/td/div'). Это возвращалось как 10 divs, все, что я хотел. Тем не менее, я не мог найти способ навигации по этим 10 div. Разве это не было бы $x('//table/tr/td/div[?]'), где? может быть 1-10? BTW это динамическая таблица, каждый div - это другой модуль для перехода к части страницы, поэтому я пытаюсь автоматизировать вход в систему и переход к определенному модулю, но я могу выбрать только 10, а не один модуль. В этом html div 1 и div 2 будут похожи на «модуль безопасности» и «модуль продажи билетов».

ответ

2

Прежде всего, вы можете попробовать Firebug + Firepath в Firefox, что является более удобным инструментом, чем инструмент разработчика Chrome.

Для вашего вопроса, то вы можете сделать это либо с помощью XPath или селеном

Использование индекса XPATH (в начинающуюся от одного), скажем, вы хотите второй:

# second div's xpath: (//table/tr/td/div)[2] 
second_div = driver.find_element_by_xpath("(//table/tr/td/div)[2]") 

Использование индекса Selenium (то есть получить все десять div от вашего xpath, а затем проиндексируйте их, начиная с нуля):

all_divs = driver.find_elements_by_xpath("//table/tr/td/div") # all_divs should have 10 elements 
second_div = all_divs[1] # zero-based index 
+0

Огромное спасибо, я не могу проверить его прямо сейчас, но похоже, что он отлично работает – gallly