与不可见元素交互并访问第二个匹配元素

时间:2014-09-07 03:22:01

标签: python selenium selenium-webdriver html-select

我想从下拉选项中选择一个值。 html如下: (该网站为http://www.flightstats.com/go/FlightStatus/flightStatusByAirport.do

<select id="airportQueryTime" name="airportQueryTime" onchange="selectTime(this); return true;" value="6">
 <option onchange="selectTime(this); return true;" selected="selected" value="6">
  6:00AM - 7:00AM
 </option>
 <option onchange="selectTime(this); return true;" value="7">
  7:00AM - 8:00AM
 </option>
 <option onchange="selectTime(this); return true;" value="8">
  8:00AM - 9:00AM
 </option>
 <option onchange="selectTime(this); return true;" value="9">
</select>



from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

url = 'http://www.flightstats.com/go/FlightStatus/flightStatusByAirport.do;jsessionid=7B477D6D5CFB639F96C5D855CEB941D0.web4:8009?airport=LAX&airportQueryDate=2014-09-06&airportQueryTime=-1&airlineToFilter=&airportQueryType=0&x=0&y=0'
driver = webdriver.Firefox()
driver.get(url)
time.sleep(6)
element = driver.find_element_by_xpath("//select[@id='airportQueryTime']/option[@value='0']")
element.click()

我的问题是:

  1. 因为如果我通过ID ='airportQueryTime'找到元素,则有三个标记,而我需要的元素是第二个。如何进入第二匹配元素?

  2. 我正在尝试使用以下代码选择选项值= 0,但是selenium会引发错误。

    selenium.common.exceptions.ElementNotVisibleException:消息:u'Element目前不可见,因此可能无法与'

  3. 进行交互

1 个答案:

答案 0 :(得分:2)

selenium有一个特殊的Select课程,用于与selectoption代码进行互动:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select


url = 'http://www.flightstats.com/go/FlightStatus/flightStatusByAirport.do;jsessionid=7B477D6D5CFB639F96C5D855CEB941D0.web4:8009?airport=LAX&airportQueryDate=2014-09-06&airportQueryTime=-1&airlineToFilter=&airportQueryType=0&x=0&y=0'
driver = webdriver.Firefox()
driver.get(url)

select = Select(driver.find_element_by_xpath("//div[@class='uiComponent674']//select[@id='airportQueryTime']"))

# print all the options
print [element.text for element in select.options]

# select option by text
select.select_by_visible_text('6:00AM - 7:00AM')

请注意,由于页面上有多个airportQueryTime个ID的元素,因此我们必须在div范围内使用uiComponent674类搜索它(用于选择时间间隔的块) )。