注意:与Python Selenium Fails to Trigger Javascript Event类似
我正在使用Selenium编写一个python脚本来导航受密码保护的网站。我需要的一个页面有一个表,它使用Javascript OnKeyDown
和OnKeyUp
事件来选择特定的行,然后再继续下一页。
在我的脚本中,我尝试使用myElement.click()
来选择行,但这似乎不会触发页面所需的Javascript事件。行周围会出现一个精细的虚线轮廓,但行颜色不会改变,并且页面会抛出一个错误,我需要在继续之前选择一行。
供参考,这是我正在使用的脚本:
#!/usr/bin/python
# Setup Selenium
from selenium import webdriver
browser = webdriver.Firefox(firefox_binary='/usr/bin/firefox', executable_path="./geckodriver")
browser.implicitly_wait(10) # Continue checking for up to 10 secs before saying something doesn't exist
# Get to the login page
browser.get('https://example.com/Default.aspx')
# Login
browser.find_element_by_id('username').send_keys('mister-sir')
browser.find_element_by_id('password').send_keys('notmypassword')
browser.find_element_by_css_selector('.btn').click()
# Get to the application
browser.find_element_by_id('ctl00_Banner1_ModuleList_ctl01_lnkModule').click()
browser.find_element_by_id('ctl00_Content_rbtTopLevel25').click()
browser.find_element_by_id('ctl00_btnContinue').click()
# Select the row
browser.find_elements_by_xpath('//table[@id=\'ctl00_Content_grdFloors_grid\']/tbody/tr[3]/td').click()
#Continue
browser.find_element_by_id('ctl00_btnContinue').click() # I get an error here, as the previous line didn't select the correct row
#browser.stop()
以下是我正在尝试选择的表格的代码段:
<div>
<div>
<table class="block-table " id="ctl00_Content_grdFloors_grid">
<tr class="block-header-row">
<th align="left" scope="col">Floor</th><th align="left" scope="col">Single - Beds</th><th align="left" scope="col">Double - Beds</th><th align="left" scope="col">Triple - Beds</th><th align="left" scope="col">Quad - Beds</th><th align="left" scope="col">Other</th>
</tr><tr class="row-detail" RoomLocationFloorSuiteID="63" OnClick="selectGrid_gridItemClick(false, this, '63', '', 'ctl00_Content_grdFloors_txtRowID', 'ctl00_Content_grdFloors_txtRowAttributes')" OnMouseOver="selectGrid_gridHighlight(this, '63')" OnMouseOut="selectGrid_gridUnHighlight(this, '63')" OnKeyDown="selectGrid_gridKeyDown(event)" OnKeyUp="selectGrid_gridKeyUp(event, false, this, '63', '', 'ctl00_Content_grdFloors_txtRowID', 'ctl00_Content_grdFloors_txtRowAttributes')" TabIndex="0" aria-label="myBuilding-Floor 02">
<td align="left">myBuilding-Floor 02</td><td align="left">1</td><td align="left">0</td><td align="left">0</td><td align="left">0</td><td align="left">0</td>
</tr><tr class="row-detail" RoomLocationFloorSuiteID="64" OnClick="selectGrid_gridItemClick(false, this, '64', '', 'ctl00_Content_grdFloors_txtRowID', 'ctl00_Content_grdFloors_txtRowAttributes')" OnMouseOver="selectGrid_gridHighlight(this, '64')" OnMouseOut="selectGrid_gridUnHighlight(this, '64')" OnKeyDown="selectGrid_gridKeyDown(event)" OnKeyUp="selectGrid_gridKeyUp(event, false, this, '64', '', 'ctl00_Content_grdFloors_txtRowID', 'ctl00_Content_grdFloors_txtRowAttributes')" TabIndex="0" aria-label="myBuilding-Floor 03">
<td align="left">myBuilding-Floor 03</td><td align="left">0</td><td align="left">0</td><td align="left">1</td><td align="left">0</td><td align="left">0</td>
</tr><tr class="row-detail" RoomLocationFloorSuiteID="71" OnClick="selectGrid_gridItemClick(false, this, '71', '', 'ctl00_Content_grdFloors_txtRowID', 'ctl00_Content_grdFloors_txtRowAttributes')" OnMouseOver="selectGrid_gridHighlight(this, '71')" OnMouseOut="selectGrid_gridUnHighlight(this, '71')" OnKeyDown="selectGrid_gridKeyDown(event)" OnKeyUp="selectGrid_gridKeyUp(event, false, this, '71', '', 'ctl00_Content_grdFloors_txtRowID', 'ctl00_Content_grdFloors_txtRowAttributes')" TabIndex="0" aria-label="myBuilding-Floor 10">
<td align="left">myBuilding-Floor 10</td><td align="left">0</td><td align="left">1</td><td align="left">0</td><td align="left">0</td><td align="left">0</td>
</tr>
</table>
</div>
<input name="ctl00$Content$grdFloors$txtRowID" type="hidden" id="ctl00_Content_grdFloors_txtRowID" />
<input name="ctl00$Content$grdFloors$txtRowAttributes" type="hidden" id="ctl00_Content_grdFloors_txtRowAttributes" />
</div>