我从下面的html代码工作:
<table .... >
<tbody .... >
<tr style="cursor:hand" onclick="OpenSession ("xxxx", "yyyyy", "zzzz")">
...
</tr>
<tr style="cursor:hand" onclick="OpenSession ("aaaa", "bbbbb", "cccc")">
...
</tr>
</tbody
</table>
使用python的selenium库,我想点击tr
标签,我写了下面的代码:
tr_elements = driver.find_elements(By.TAG_NAME,value='tr')
for tr in tr_elements:
if tr.get_attribute('onclick'):
print(tr)
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//tr[contains(@onclick, 'OpenSession ')]"))).click()
time.sleep(5)
运行此脚本时,我收到以下错误:
〈 selenium 元素.网络驱动程序.远程.网络元素.网络元素(会话=“96 f27 c 0a-2870-4011-8668-abbbdab 5 bd 2c”,元素=“7a 4f 8 c92-f571- 471 e-ad 63 - 6c 6113 f17494”)〉 selenium 元素.常见.异常.元素不可交互异常:消息:无法将元素滚动到视图中
2条答案
按热度按时间brqmpdu11#
好吧,如果你不给予网站,这是很难说。
我猜这个元素在页面中是看不见的。你可以试着像这样最大化窗口和无头模式,在你的脚本的开头添加下面的代码。
t8e9dugd2#
最好的方法是找出所有的元素,然后迭代。当点击可点击的元素时,页面会刷新,元素不会被DOM附加,你可能会得到过时的引用异常。
最好的方法是重新分配元素。
试试这个。
将识别具有
onclcick
属性的所有tr
元素,然后是iterate
,然后再次搜索element
。它将使用index来使用each element
,然后是scroll first
,然后是click
,一旦单击任何元素页面,将是refreshed
,然后它将在循环中再次捕获该元素,此时它是assined
。