使用Selenium [Python]

时间:2018-08-08 20:17:24

标签: python selenium

我很难找到一个元素。

该元素是

    ,当我右键单击页面时出现,它是网页的菜单(例如在Windows上右键单击桌面时)。当我使用Selenium右键单击它时,运行的下一行代码是:

    optionMenuWindow=WebDriverWait(driver,60).until(EC.visibility_of_element_located((By.XPATH, "//ul[1]/li[10]/a[1]")))
    
    optionMenuWindow.click()
    

    我也尝试过:

    presence_of_element_located
    

    但是它挂在那儿等待元素(尽管由于单击鼠标右键,元素已经可见),并且抛出TimeoutException。

    有趣的是,调试脚本时,断点在等待元素(在optionMenuWindow = WebDriverWait上),如果我再次右键单击以显示

      元素,它将正确定位元素optionMenuWindow,然后继续到optionMenuWindow.click()。因此,这意味着我的xpath是正确的,实际上是在iframe中,而我更改为正确的。

      这是html元素

      <ul class="ctx-menu popup-shadow ctx-menu-no-icons ctx-menu-contains-submenus" style="display: block; left: 716px; top: 276px;">
          <li class="cf ctx-menu-action-PROPS">
              <a href="javascript:;">
                  <span class="ctx-menu-text">Properties...</span>
              </a>
          </li>
          <li class="cf ctx-menu-action- ctx-menu-divider"></li>
          <li class="cf ctx-menu-action- ctx-menu-has-submenu">
              <a href="javascript:;">
                  <span class="ctx-menu-text">Notes</span>
              </a>
              <ul class="ctx-menu ctx-menu-submenu popup-shadow ctx-menu-no-icons" style="display: none;">
                  <li class="cf ctx-menu-action-ADDNOTE">
                      <a href="javascript:;">
                          <span class="ctx-menu-text">Add a New Note</span>
                      </a>
                  </li>
              </ul>
              <span class="cell-icon cell-FOLDOUT-icon"></span>
          </li>
          <li class="cf ctx-menu-action- ctx-menu-divider"></li>
          <li class="cf ctx-menu-action-ATB">
              <a href="javascript:;">
                  <span class="ctx-menu-text">Sort</span>
              </a>
          </li>
          <li class="cf ctx-menu-action- ctx-menu-divider"></li>
          <li class="cf ctx-menu-action-COPY">
              <a href="javascript:;">
                  <span class="ctx-menu-text">Copy</span>
              </a>
          </li>
          <li class="cf ctx-menu-action- ctx-menu-divider"></li>
          <li class="cf ctx-menu-action-PR">
              <a href="javascript:;">
                  <span class="ctx-menu-text">Print...</span>
              </a>
          </li>
          <li class="cf ctx-menu-action-XL">
               <!-- I WANT TO GET THIS A TAG ELEMENT -->
              <a href="javascript:;">
                  <span class="ctx-menu-text">Send to Excel</span>
              </a>
          </li>
          <li class="cf ctx-menu-action-EC">
              <a href="javascript:;">
                  <span class="ctx-menu-text">Export...</span>
              </a>
          </li>
          <li class="cf ctx-menu-action- ctx-menu-divider"></li>
      </ul>
      

      这是它的xpath(来自mozilla检查器)

      html / body / div [2] / iframe /#document / html / body / ul

      这是我的右键单击操作,mainWindow基本上是一个大元素,您可以右键单击它以查看其选项

         mainWindow = driver.find_element_by_xpath("//div[@id='5']/div[2]")
          WebDriverWait(driver, 60).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='5']/div[2]")))
          actions.move_to_element(mainWindow).context_click().perform()
      

      有什么想法吗?

      谢谢!

1 个答案:

答案 0 :(得分:0)

我从来没有机会探索硒中的右键单击,但是做了一些研究,发现您必须给context_click()赋予元素才能执行右键单击。因此,您可以尝试以下方法:

mainWindow = driver.find_element_by_xpath("//div[@id='5']/div[2]")
WebDriverWait(driver, 60).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='5']/div[2]")))
actions.move_to_element(mainWindow).context_click(mainWindow).perform()
optionMenuWindow=WebDriverWait(driver,60).until(EC.visibility_of_element_located((By.XPATH, "//ul[1]/li[10]/a[1]")))
optionMenuWindow.click()