使用Selenium修改网页表格数值时遇到元素无法被键盘访问问题及解决
Selenium 操作网页表格单元格输入报错及解决方案
问题场景
我尝试使用Selenium在对应网站的表格行中填入新数值,最初的实现代码如下:
URL = "https://sigmazone.com/catapult-grid/" browser = webdriver.Firefox("/usr/lib/firefox") browser.get(URL) # 设置行数为1 num_rows = browser.find_element_by_id("noOfRows") num_rows.clear() num_rows.send_keys("1") # 刷新表格行数 update_btn = browser.find_element_by_id("updateNoOfRows") update_btn.click() cells = browser.find_elements_by_class_name("htRight") # 跳过列表第一个元素,其对应包含整个表格的div节点 for cell in cells[1:]: cell.click() cell.send_keys("150")
运行代码后,执行send_keys(150)方法时抛出如下报错:Message: Element <td class="htRight current highlight"> is not reachable by keyboard
解决方法
操作链(Action Chain)重置是解决该问题的核心步骤,若不做重置,每次调用action.perform()时都会执行之前积累的所有操作,会导致重复操作、元素不可访问等问题。最终的解决代码如下:
def set_val(selected_cell, value): action.move_to_element(selected_cell).double_click() # 选中目标单元格 action.send_keys(Keys.BACKSPACE, Keys.BACKSPACE, Keys.BACKSPACE) # 删除单元格原有数值 action.send_keys(str(value)) # 输入目标数值 action.perform() # 执行本次组装的操作链 action.reset_actions() # 仅执行该方法无法完全清空操作链缓存 # 手动清空所有设备的操作缓存 for device in action.w3c_actions.devices: device.clear_actions()
内容的提问来源于stack exchange,提问作者PonyTale
相关产品推荐
相关产品推荐

