如果您Element is not currently interactable
检查该元素是否未禁用且可见。如果你想hack
执行它JS
来启用它。
我访问的主页id ita_form_location_RouteLanguageTextBox_0
不存在,在航班一号下也没有Enter routing code
。我可以看到文本框说airport city or city name
此外,如果您有 id 更喜欢使用find_element_by_id
if not 尝试使用css selector
if you can 而不是xpath
. 它更清洁。
更新
这是一个工作脚本:
如上所述,elements
选定的不是visible
. 实际完成的是,有 5-6 个不同的elements
全部隐藏,当您单击显示高级路线时,它会选择 2 个随机路线并使它们可见。
所以id
并不总是一样的。如果您使用相同的 id,您element
有时会被隐藏(因为它会选择随机 id),因此selenium
无法处理它。我做了一个选择器,将 2 隐藏elements
from selenium import webdriver
import selenium.webdriver.support.ui as ui
driver = webdriver.Firefox()
driver.get("http://matrix.itasoftware.com/")
#click on the multi tab
tab = driver.find_element_by_id("ita_layout_TabContainer_0_tablist_ita_form_multislice_MultiSliceForm_0").click()
#click on the advanced routes
advanced_routing=ui.WebDriverWait(driver, 10).until(
lambda driver : driver.find_element_by_id("sites_matrix_layout_RouteLanguageToggleLink_1")
)
advanced_routing.click()
#get all visible elements with id like ita_form_location_RouteLanguageTextBox. its similar to regex ita_form_location_RouteLanguageTextBox.*
element = ui.WebDriverWait(driver, 10).until(
lambda driver : driver.find_elements_by_css_selector("[id*=ita_form_multislice_MultiSliceRow] [id*=ita_form_location_RouteLanguageTextBox]")
)
element[0].send_keys("foo")
element[1].send_keys("bar")
import time
time.sleep(20)