selenium 如何点击标签中包含onclick属性的python对象< tr>

eit6fx6z  于 2023-02-12  发布在  Python
关注(0)|答案(2)|浏览(189)

我从下面的html代码工作:

  1. <table .... >
  2. <tbody .... >
  3. <tr style="cursor:hand" onclick="OpenSession ("xxxx", "yyyyy", "zzzz")">
  4. ...
  5. </tr>
  6. <tr style="cursor:hand" onclick="OpenSession ("aaaa", "bbbbb", "cccc")">
  7. ...
  8. </tr>
  9. </tbody
  10. </table>

使用python的selenium库,我想点击tr标签,我写了下面的代码:

  1. tr_elements = driver.find_elements(By.TAG_NAME,value='tr')
  2. for tr in tr_elements:
  3. if tr.get_attribute('onclick'):
  4. print(tr)
  5. WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//tr[contains(@onclick, 'OpenSession ')]"))).click()
  6. 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 元素.常见.异常.元素不可交互异常:消息:无法将元素滚动到视图中

brqmpdu1

brqmpdu11#

好吧,如果你不给予网站,这是很难说。
我猜这个元素在页面中是看不见的。你可以试着像这样最大化窗口和无头模式,在你的脚本的开头添加下面的代码。

  1. from selenium import webdriver
  2. options = webdriver.ChromeOptions()
  3. options.add_argument("--headless")
  4. options.add_argument("--start-maximized")
  5. driver = webdriver.Chrome(options=options)
t8e9dugd

t8e9dugd2#

最好的方法是找出所有的元素,然后迭代。当点击可点击的元素时,页面会刷新,元素不会被DOM附加,你可能会得到过时的引用异常。
最好的方法是重新分配元素。
试试这个。

  1. tr_elements=driver.find_elements(By.XPATH,"//tr[contains(@onclick, 'OpenSession ')]")
  2. for tr in range(len(tr_elements)):
  3. tr_elements=driver.find_elements(By.XPATH,"//tr[contains(@onclick, 'OpenSession ')]")
  4. tr_elements[tr].location_once_scrolled_into_view
  5. tr_elements[tr].click()
  6. time.sleep(3) # slow down the for loop

将识别具有onclcick属性的所有tr元素,然后是iterate,然后再次搜索element。它将使用index来使用each element,然后是scroll first,然后是click,一旦单击任何元素页面,将是refreshed,然后它将在循环中再次捕获该元素,此时它是assined

相关问题