【问题标题】:Not able to click on link in webpage using selenium webdriver无法使用 selenium webdriver 单击网页中的链接
【发布时间】:2016-09-29 21:22:17
【问题描述】:

我想使用 selenium python webdriver 在我的路由器网页中单击“无线”链接。下面是html:

  <html>
       <head>
       <frameset framespacing="0" frameborder="0" border="0" rows="50,*,15">
       <frame noresize="" marginheight="0" marginwidth="0" target="_self" scrolling="no" border="0" frameborder="no" name="logofrm" src="logo.html">
       <frameset border="0" frameborder="0" cols="170,*">
       <frame noresize="" marginheight="0" marginwidth="0" target="_self" scrolling="no" border="0" frameborder="no" name="menufrm" src="menu.html">
       <html>
          <head>
          <body class="mainMenuBody" marginwidth="0" marginheight="0" leftmargin="0" topmargin="0">
             <table cellspacing="0" cellpadding="0" border="0" height="100%">
             <tbody>
                <tr>
                   <td width="1" style="background-color: #C35822"></td>
                   <td class="menu" width="170" valign="top" align="left">
                      <br>
                      <script language="javascript">
                      <div id="folder0">
                      <div id="folder1" style="display: block;">
                      <div id="folder2" style="display: none;">
                      <div id="folder3" style="display: none;">
                      <div id="folder4" style="display: none;">
                      <div id="item5" style="display: none;">
                      <div id="item6" style="display: none;">
                      <div id="item7" style="display: none;">
                      <div id="item8" style="display: none;">
                      <div id="folder9" style="display: none;">
                      <div id="folder10" style="display: none;">
                      <div id="folder11" style="display: none;">
                      <div id="folder12" style="display: block;">
                      <div id="folder13" style="display: none;">
                      <div id="item14" style="display: none;">
                      <div id="item15" style="display: none;">
                      <div id="item16" style="display: none;">
                      <div id="folder17" style="display: none;">
                      <div id="item18" style="display: none;">
                      <div id="folder19" style="display: none;">
                      <div id="item20" style="display: none;">
                      <div id="item21" style="display: none;">
                      <div id="item22" style="display: none;">
                      <div id="folder23" style="display: none;">
                      <div id="folder24" style="display: none;">
                      <div id="item25" style="display: none;">
                      <div id="item26" style="display: none;">
                      <div id="folder27" style="display: none;">
                      <div id="folder28" style="display: none;">
                      <div id="folder29" style="display: none;">
                      <div id="folder30" style="display: none;">
                      <div id="folder31" style="display: none;">
                      <div id="folder32" style="display: none;">
                      <div id="item33" style="display: none;">
                      <div id="item34" style="display: none;">
                      <div id="folder35" style="display: none;">
                      <div id="item36" style="display: none;">
                      <div id="item37" style="display: none;">
                      <div id="item38" style="display: none;">
                      <div id="item39" style="display: none;">
                      <div id="folder40" style="display: none;">
                      <div id="item41" style="display: none;">
                      <div id="item42" style="display: none;">
                      <div id="folder43" style="display: none;">
                      <div id="folder44" style="display: none;">
                      <div id="folder45" style="display: none;">
                      <div id="folder46" style="display: none;">
                      <div id="folder47" style="display: none;">
                      <div id="item48" style="display: none;">
                      <div id="item49" style="display: none;">
                      <div id="item50" style="display: none;">
                      <div id="item51" style="display: none;">
                      <div id="folder52" style="display: none;">
                      <div id="folder53" style="display: block;">
                      <table cellspacing="2" cellpadding="0" border="0" width="100%">
                      <tbody>
                      <tr>
                      <td class="menuCell" width="100%" valign="middle" nowrap="">
                      <a class="menuLink" onclick="javascript:clickOnFolder(53)" target="basefrm" href="wlswitchinterface0.wl">   Wireless  </a>
                      </td>
                      </tr>
                      </tbody>
                      </table>
                      </div>
                      <div id="item54" style="display: block;">
                      <div id="item55" style="display: block;">
                      <div id="item56" style="display: block;">
                      <div id="item57" style="display: block;">
                      <div id="item58" style="display: block;">
                      <div id="item59" style="display: block;">
                      <div id="folder60" style="display: block;">
                      <div id="folder61" style="display: block;">
                      <div id="folder62" style="display: none;">
                      <div id="item63" style="display: none;">
                      <div id="item64" style="display: none;">
                      <div id="item65" style="display: none;">
                      <div id="folder66" style="display: none;">
                      <div id="folder67" style="display: none;">
                      <div id="folder68" style="display: none;">
                      <div id="folder69" style="display: none;">
                      <div id="folder70" style="display: none;">
                      <div id="item71" style="display: none;">
                      <div id="item72" style="display: none;">
                      <div id="folder73" style="display: none;">
                      <div id="folder74" style="display: none;">
                      <div id="folder75" style="display: none;">
                      <noscript>You must enable JavaScript in your browser.</noscript>
                      </td>
                      <td width="1" style="background-color: #C35822"></td>
                      <td style="background-color: #ffffff"></td>
                      </tr>
                      </tbody>
                      </table>
                      </body>
                      </html>
                      </frame>
                      <frame noresize="" marginheight="16" marginwidth="0" target="_self" scrolling="auto" border="0" frameborder="no" name="basefrm" src="info.html">
                      </frameset>
                      <frame noresize="" marginheight="0" marginwidth="0" target="_self" scrolling="no" border="0" frameborder="no" name="footerfrm" src="footer.html">
                      </frameset>
                      </html>

我的脚本中有以下行:

driver.find_element_by_xpath('//a[@href="wlswitchinterface0.wl"]').click()

但它不起作用并抛出 NoSuchElementException

NoSuchElementException:消息:无法定位元素: {"method":"xpath","selector":"//a[@href=\"wlswitchinterface0.wl\"]"}

【问题讨论】:

    标签: python selenium xpath selenium-webdriver


    【解决方案1】:

    问题不在于引号,而在于您在框架内。

    首先,你需要在他的内部切换:

    frame = driver.find_element_by_xpath("//frame[@name='menufrm']")
    driver.switch_to_frame(frame)
    

    现在,您可以访问您的链接了:

    driver.find_element_by_xpath("//a[@href='wlswitchinterface0.wl']").click()
    

    在此框架内访问所有所需内容后,您需要切换到默认内容:

    driver.switch_to_default_content()
    

    【讨论】:

    • 它有效。谢谢@Striter。但是我想知道为什么 Selenium IDE 生成的代码无法处理这些帧切换?
    • 那是因为 Selenium IDE 不关心帧,它可以看到整个网页。 Selenium WebDriver 一次只会关注一帧。
    • 因为框架(或 iframe)意味着与上下文基础不同的上下文。
    【解决方案2】:

    问题似乎与引号有关。使用以下语法:

    driver.find_element_by_xpath("//a[@href='wlswitchinterface0.wl']").click()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-27
      • 2014-11-06
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 2017-02-03
      相关资源
      最近更新 更多