定位元素的时候遇到的一个奇怪的问题:给一个输入框输入内容的时候,selenium 服务器返回:element not interactable
,我以为是元素没加载出来,就在输入前做了个显示等待。但 selenium 服务器依旧报这个错误。我在输入前面加了个点击事件,服务器返回了新的错误,意思好像是:<td>
把点击事件拦截了,具体报错如下:selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <input id="row1_name" class="input_name" name="name_1" value="" type="text"> is not clickable at point (880, 194). Other element would receive the click: <td>...</td>
HTML 是表格中放了输入框,页面如下,方便查看我把不需要的标签内的东西换成了三个点:
<tbody id="tbody" class="tbody">
<tr class="tb_row" id="tr_1">
<td class="td_row row_no">...</td>
<td class="td_row">
<input id="row1_name" class="input_name" name="name_1" value="" type="text">
<!-- 上面这个是我要定位的元素 -->
</td>
<td class="td_row">...</td>
<td class="td_row">...</td>
<td class="td_oprow">...</td>
</tr>
</tbody>
我在输入前做了显示等待,而且是等待元素可见后才会返回成功,但是这部分的并没有报错,那就应该是元素已经可见了,代码如下:
def type_text(self, text, loc):
'''输入值
Args:
text (str): 要输入的内容
'''
logger.info(f"loc is {loc}, loc type is {type(loc)}")
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(loc))
ele = self.find_element(*loc)
ele.click()
ele.send_keys(text)
我用(By.XPATH, "//tr[@id='tr_1']/td/input[@name='name_1']")
进行定位,因为这个是表格里的输入框,只有这默认显示的第一行的输入框有 ID,新加的行中的输入框是没有 ID 的,用这种方法定位比较通用,定位第几行的元素改下数字就行了。
我看过了,HTML 里也没有 iframe 标签,不太明白这是怎么回事。
大佬们帮我看看问题出在哪里呀?是表格的元素不能直接操作吗?