【问题标题】:Selenium Python - Cannot click on a form buttonSelenium Python - 无法单击表单按钮
【发布时间】:2018-08-03 19:28:01
【问题描述】:

无法单击表单按钮,但可以在屏幕上看到它。我可以看到该按钮,但由于某种原因无法单击它,该按钮肯定在屏幕中间。尝试过,xpath,id,class 等。它上面似乎有一个按钮,也隐藏了相同的 id。 html 也包含在此处。不知道我错过了什么。谢谢

=== RESTART: C:\ffox_Data_Source_SCCM.py ===
Traceback (most recent call last):
  File "C:\Selenium\ffox_Data_Source_SCCM.py", line 67, in <module>
    import_btn.click()
  File "C:\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click
    self._execute(Command.CLICK_ELEMENT)
  File "C:\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 628, in _execute
    return self._parent.execute(command, params)
  File "C:\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 320, in execute
    self.error_handler.check_response(response)
  File "C:\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: Element <button id="import_button" class="web" name="import_button" type="submit"> could not be scrolled into view

### CODE ###
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.action_chains import ActionChains

base_url =  "xxx"

driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get(base_url)
username = driver.find_element_by_id("userNameInput")
username.send_keys("xxx")

time.sleep(1)

password = driver.find_element_by_id("passwordInput")
password.send_keys("xxx")
password.send_keys(Keys.RETURN)

time.sleep(6)

driver.implicitly_wait(5)

createnew = driver.find_element_by_id("filter")
createnew.send_keys("sys_data_source.list")
time.sleep(2)
createnew.send_keys(Keys.RETURN)
time.sleep(1)

driver.switch_to_frame("gsft_main")
time.sleep(1)

name_field = element = driver.find_element(By.XPATH, '/html/body/div[1]/div[1]/span/div/div[5]/table/tbody/tr/td/div/table/thead/tr[2]/td[3]/div/div/div/input')
name_field.send_keys("SCCM 2012 v2")
name_field.send_keys(Keys.RETURN)
time.sleep(1)

comp_identity = driver.find_element(By.XPATH, '//a[contains(text() , "SCCM 2012 v2 Computer Identity")]')
comp_identity.click()
time.sleep(3)

test_load = driver.find_element(By.XPATH, '//a[contains(text() , "Test Load 20 Records")]')
test_load.click()
time.sleep(10)

run_transform = driver.find_element(By.XPATH, '//a[contains(text() , "Run Transform")]')
run_transform.click()
time.sleep(3)

import_btn = driver.find_element(By.XPATH, '//*[@id="import_button"]')
import_btn.click()
time.sleep(1)

### HTML ####

<form action="ui_page_process.do?sys_id=d84d17080af04cc80091cff5048b6f40" id="form.d84d17080af04cc80091cff5048b6f40" method="POST">
   <input name="sysparm_ck" id="sysparm_ck" type="hidden" value="88fc0b14db33d780dd62d7795e96193fb827f686fb649455da15cfd760143730135ac52f">
   <link rel="stylesheet" href="styles/heisenberg/heisenberg_all.css">
   <nav class="navbar navbar-default" role="navigation">
      <div class="container-fluid">
         <div class="navbar-header">
            <span class="btn btn-default icon-chevron-left navbar-btn" onclick="back();"></span>
            <h1 style="display:inline-block;" class="navbar-title">Specify Import set and Transform map</h1>
         </div>
      </div>
   </nav>
   <div style="margin-left: 20px; padding-bottom: 20px; padding-right: 20px;" name="run_transform_table" id="run_transform_table">
      <div style="padding-top:20px;padding-bottom:20px;">
         <table style="width:100%;">
            <tbody>
               <tr id="map_select">
                  <td>
                  </td>
               </tr>
            </tbody>
         </table>
      </div>
      <div><button class="web" name="import_button" id="import_button" style="display:none;" type="submit" onclick="onSubmit();" classname="web">Transform</button><button class="btn btn-primary" name="import_button" id="import_button" type="submit" onclick="onSubmit();">Transform</button><span id="loading" name="loading" style="display: none"><img src="images/loading_anim2.gifx" alt="Transforming..."><strong>Transforming...</strong></span></div>
   </div>
</form>
<input name="sysparm_ck" id="sysparm_ck" type="hidden" value="88fc0b14db33d780dd62d7795e96193fb827f686fb649455da15cfd760143730135ac52f">
<link rel="stylesheet" href="styles/heisenberg/heisenberg_all.css">
<nav class="navbar navbar-default" role="navigation">
   <div class="container-fluid">
      <div class="navbar-header">
         <span class="btn btn-default icon-chevron-left navbar-btn" onclick="back();"></span>
         <h1 style="display:inline-block;" class="navbar-title">Specify Import set and Transform map</h1>
      </div>
   </div>
</nav>
<script>function back() {
   window.history.back();
   }
</script>
<div style="display:none;" class="notification notification-info" id="info_message"><span id="info_message_text">1533405277173</span><button data-dismiss="alert" class="btn-icon close icon-cross"><span class="sr-only">Close</span></button></div>
<div style="display:none;" class="notification notification-warning" id="warning_message"><span id="warning_message_text">1533405277173</span><button data-dismiss="alert" class="btn-icon close icon-cross"><span class="sr-only">Close</span></button></div>
<div style="margin-left: 20px; padding-bottom: 20px; padding-right: 20px;" name="run_transform_table" id="run_transform_table">
   <div class="form-group is-required" id="importset" style="overflow:hidden;padding-top:20px;">
      <label class="col-sm-2 control-label" for="import_set" style="text-align:right;"><span class="required-marker"></span>Import set</label>
      <span class="col-sm-4">
         <div class="select2-container form-control sn-select-basic required" id="s2id_import_set">
            <a href="javascript:void(0)" class="select2-choice" tabindex="-1">   <span class="select2-chosen" id="select2-chosen-1">ISET000238110 - imp_sccm2012v2_computer_id (2018-08-04 17:54:53)</span><abbr class="select2-search-choice-close"></abbr>   <span class="select2-arrow" role="presentation"><b role="presentation"></b></span></a><label for="s2id_autogen1" class="select2-offscreen">Import set</label><input class="select2-focusser select2-offscreen" type="text" aria-haspopup="true" role="button" aria-labelledby="select2-chosen-1" id="s2id_autogen1">
            <div class="select2-drop select2-display-none select2-with-searchbox">
               <div class="select2-search">       <label for="s2id_autogen1_search" class="select2-offscreen">Import set</label>       <input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" class="select2-input" role="combobox" aria-expanded="true" aria-autocomplete="list" aria-owns="select2-results-1" id="s2id_autogen1_search" placeholder="">   </div>
               <ul class="select2-results" role="listbox" id="select2-results-1">   </ul>
            </div>
         </div>
      </span>
   </div>
   <div style="padding-top:20px;padding-bottom:20px;">
      <table style="width:100%;">
         <tbody>
            <tr id="map_select">
               <td>
                  <script language="JavaScript" src="scripts/classes/GwtWindowList.jsx?v=05-10-2018_1459"></script><script language="JavaScript" src="scripts/classes/GwtSelectTable.jsx?v=05-10-2018_1459"></script><script>function map_select_sb_populate(leftzone, rightzone) {
                     // do nothing, we are populating the zones manually
                     }
                  </script>
                  <table id="map_select_sb_tbl" border="0" cellspacing="0" cellpadding="0" width="100%">
                     <tbody>
                        <tr>
                           <td align="center">Available maps</td>
                        </tr>
                        <tr>
                           <td width="40%" style="vertical-align:top; border:1px solid #999;" dropzone="true">
                              <div style="height: 200px; width: 100%; overflow: auto; border: 0px solid; position: relative;" id="map_select_sb_left" dropzone="true" onclick="map_select_sb_left_onclick();" readonly="false" unique="true">
                                 <div style="width: 100%; height: 0px;"></div>
                              </div>
                              <script>function map_select_sb_left_onclick() {
                                 ;
                                 }
                              </script>
                           </td>
                           <td width="20%" align="center" style="vertical-align:middle;">
                              <table cellspacing="3" cellpadding="0" border="0" width="100%">
                                 <tbody>
                                    <tr id="map_select_sb_move_right_text">
                                       <td align="center">Add</td>
                                    </tr>
                                    <tr id="map_select_sb_move_right_button">
                                       <td align="center"><a class="btn btn-default icon-chevron-right" style="margin-top: 5px; width:32px; height:32px;" onclick="map_select_sb_moveLeftToRight();"><span class="sr-only">Add</span></a></td>
                                    </tr>
                                 </tbody>
                              </table>
                           </td>
                           <td width="40%" style="vertical-align:top; border:1px solid #999;" dropzone="true">
                              <div style="height: 200px; width: 100%; overflow: auto; border: 0px; position: relative;" id="map_select_sb_right" dropzone="true" onclick="map_select_sb_right_onclick();" readonly="false" unique="false">
                                 <div id="map_select_sb_left_windowList_0" dragpart="map_select_sb_left_windowList_0" class="drag_section_part selected" style="position: relative; z-index: 1; left: 0px; top: 0px;">
                                    <table role="presentation" id="window.map_select_sb_left_windowList_0" class="gwt_window_list_window" cellspacing="0" cellpadding="0" style="padding: 0px; width: 100%; height: 20px;">
                                       <tbody>
                                          <tr style="vertical-align: top;">
                                             <td>
                                                <table class="drag_section_header_active" role="presentation" style="width: 100%; cursor: move;">
                                                   <tbody>
                                                      <tr>
                                                         <td style="display: none; top: 0px; left: 0px; vertical-align: top; white-space: nowrap;"></td>
                                                      </tr>
                                                   </tbody>
                                                </table>
                                             </td>
                                          </tr>
                                          <tr style="height: 100%; vertical-align: top; display: none;">
                                             <td><span id="body_map_select_sb_left_windowList_0" class="widget_body" style="overflow: auto; font-weight: normal; padding: 0px; width: 100%;"></span></td>
                                          </tr>
                                       </tbody>
                                    </table>
                                 </div>
                                 <div style="width: 100%; height: 0px;"></div>
                              </div>
                           </td>
                        </tr>
                     </tbody>
                  </table>
               </td>
            </tr>
         </tbody>
      </table>
   </div>
   <div><button class="web" name="import_button" id="import_button" style="display:none;" type="submit" onclick="onSubmit();" classname="web">Transform</button><button class="btn btn-primary" name="import_button" id="import_button" type="submit" onclick="onSubmit();">Transform</button><span id="loading" name="loading" style="display: none"><img src="images/loading_anim2.gifx" alt="Transforming..."><strong>Transforming...</strong></span></div>
</div>
<div class="form-group is-required" id="importset" style="overflow:hidden;padding-top:20px;">
   <label class="col-sm-2 control-label" for="import_set" style="text-align:right;"><span class="required-marker"></span>Import set</label>
   <span class="col-sm-4">
      <div class="select2-container form-control sn-select-basic required" id="s2id_import_set">
         <a href="javascript:void(0)" class="select2-choice" tabindex="-1">   <span class="select2-chosen" id="select2-chosen-1">ISET000238110 - imp_sccm2012v2_computer_id (2018-08-04 17:54:53)</span><abbr class="select2-search-choice-close"></abbr>   <span class="select2-arrow" role="presentation"><b role="presentation"></b></span></a><label for="s2id_autogen1" class="select2-offscreen">Import set</label><input class="select2-focusser select2-offscreen" type="text" aria-haspopup="true" role="button" aria-labelledby="select2-chosen-1" id="s2id_autogen1">
         <div class="select2-drop select2-display-none select2-with-searchbox">
            <div class="select2-search">       <label for="s2id_autogen1_search" class="select2-offscreen">Import set</label>       <input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" class="select2-input" role="combobox" aria-expanded="true" aria-autocomplete="list" aria-owns="select2-results-1" id="s2id_autogen1_search" placeholder="">   </div>
            <ul class="select2-results" role="listbox" id="select2-results-1">   </ul>
         </div>
      </div>
   </span>
</div>
<div style="padding-top:20px;padding-bottom:20px;">
   <table style="width:100%;">
      <tbody>
         <tr id="map_select">
            <td>
               <script language="JavaScript" src="scripts/classes/GwtWindowList.jsx?v=05-10-2018_1459"></script><script language="JavaScript" src="scripts/classes/GwtSelectTable.jsx?v=05-10-2018_1459"></script><script>function map_select_sb_populate(leftzone, rightzone) {
                  // do nothing, we are populating the zones manually
                  }
               </script>
               <table id="map_select_sb_tbl" border="0" cellspacing="0" cellpadding="0" width="100%">
                  <tbody>
                     <tr>
                        <td align="center">Available maps</td>
                     </tr>
                     <tr>
                        <td width="40%" style="vertical-align:top; border:1px solid #999;" dropzone="true">
                           <div style="height: 200px; width: 100%; overflow: auto; border: 0px solid; position: relative;" id="map_select_sb_left" dropzone="true" onclick="map_select_sb_left_onclick();" readonly="false" unique="true">
                              <div style="width: 100%; height: 0px;"></div>
                           </div>
                           <script>function map_select_sb_left_onclick() {
                              ;
                              }
                           </script>
                        </td>
                        <td width="20%" align="center" style="vertical-align:middle;">
                           <table cellspacing="3" cellpadding="0" border="0" width="100%">
                              <tbody>
                                 <tr id="map_select_sb_move_right_text">
                                    <td align="center">Add</td>
                                 </tr>
                              </tbody>
                           </table>
                        </td>
                        <td width="40%" style="vertical-align:top; border:1px solid #999;" dropzone="true">
                           <div style="height: 200px; width: 100%; overflow: auto; border: 0px; position: relative;" id="map_select_sb_right" dropzone="true" onclick="map_select_sb_right_onclick();" readonly="false" unique="false">
                              <div id="map_select_sb_left_windowList_0" dragpart="map_select_sb_left_windowList_0" class="drag_section_part selected" style="position: relative; z-index: 1; left: 0px; top: 0px;">
                                 <table role="presentation" id="window.map_select_sb_left_windowList_0" class="gwt_window_list_window" cellspacing="0" cellpadding="0" style="padding: 0px; width: 100%; height: 20px;">
                                    <tbody>
                                       <tr style="vertical-align: top;">
                                          <td>
                                             <table class="drag_section_header_active" role="presentation" style="width: 100%; cursor: move;">
                                                <tbody>
                                                   <tr>
                                                      <td style="display: none; top: 0px; left: 0px; vertical-align: top; white-space: nowrap;"></td>
                                                   </tr>
                                                </tbody>
                                             </table>
                                          </td>
                                       </tr>
                                       <tr style="height: 100%; vertical-align: top; display: none;">
                                          <td><span id="body_map_select_sb_left_windowList_0" class="widget_body" style="overflow: auto; font-weight: normal; padding: 0px; width: 100%;"></span></td>
                                       </tr>
                                    </tbody>
                                 </table>
                              </div>
                              <div style="width: 100%; height: 0px;"></div>
                           </div>
                           <script>function map_select_sb_right_onclick() {
                              ;
                              }
                           </script>
                        </td>
                     </tr>
                  </tbody>
               </table>
            </td>
         </tr>
      </tbody>
   </table>
</div>
<div><button class="web" name="import_button" id="import_button" style="display:none;" type="submit" onclick="onSubmit();" classname="web">Transform</button><button class="btn btn-primary" name="import_button" id="import_button" type="submit" onclick="onSubmit();">Transform</button><span id="loading" name="loading" style="display: none"><img src="images/loading_anim2.gifx" alt="Transforming..."><strong>Transforming...</strong></span></div>

【问题讨论】:

  • 尝试添加等待元素
  • 像隐式等待什么的?
  • 请分享 html 代码并指出哪个元素引发了该异常
  • @anfield,使用显式等待等待元素可点击
  • 听起来您为可见元素设置了错误的定位器,或者您使用的定位器找到了多个元素,其中第一个不可见。发布指向该页面的链接将有很大帮助,或者至少对相关的 HTML 有很大帮助。

标签: python selenium-webdriver


【解决方案1】:

此链接有帮助 - WebDriverException: Message: TypeError: rect is undefined

There were two elements with the same xpath and id so i had to use the below code to click on the second one  

import_btn = driver.find_elements(By.XPATH, '//*[@id="import_button"]')[1]  
hov = ActionChains(driver).move_to_element(import_btn)  
time.sleep(6)  
hov.click()  
hov.perform()  

【讨论】:

    猜你喜欢
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多