Python + Selenium:我在路由器' site'

时间:2017-12-27 10:18:04

标签: python selenium xpath automation

我正在尝试编写一个Python脚本来自动更改我的路由器站点(10.0.0.2)中的Wi-Fi密码。我使用Selenium而且我一直在打砖墙,因为我找不到一些元素。非常感谢您的帮助。我将在下面提供调试所需的所有资源:

我成功使用XPath的find元素登录路由器。

找到提交/登录按钮并单击它:

browser.find_element_by_xpath('//input[@type="submit"]').send_keys(Keys.ENTER)`

另外,我尝试了几种方法来查找元素,但我暂时将它们注释掉了。

#Locate Advanced Tab --1
browser.find_element_by_name("Advanced").click()

#Locate Advanced Tab --2
#tt1 = browser.find_element_by_xpath("//td[@id='topnav1']")
#tt1.click()

[1]#Locates the the advance tab on the page -- 3
#adv = browser.find_element_by_id('topnav1')
#adv.send_keys(Keys.RETURN)

这是" Advanced"的代码。我的路由器中的标签:

<td id="topnav1" class="topnavoff" width="140"><a       href="javascript:ontopnav('1')">Advanced</a></td>

分别编辑:代码和错误。

browser.find_element_by_link_text("Advanced").click()
  

追踪(最近一次通话):     File&#34; celenium.py&#34;,第22行,in       browser.find_element_by_link_text(&#34;高级&#34)。单击()     文件&#34; C:\ Users \ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py&#34;,第337行,在find_element_by_link_text中       return self.find_element(by = By.LINK_TEXT,value = link_text)     文件&#34; C:\ Users \ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py&#34;,第791行,​​在find_element中       &#39;价值&#39;:价值})[&#39;价值&#39;]     文件&#34; C:\ Users \ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py&#34;,第256行,执行中       self.error_handler.check_response(响应)     文件&#34; C:\ Users \ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ errorhandler.py&#34;,第194行,在check_response中       提出exception_class(消息,屏幕,堆栈跟踪)   selenium.common.exceptions.NoSuchElementException:消息:无法找到元素:高级

browser.find_element_by_css_selector("#topnav1>a").click()
  

追踪(最近一次通话):     文件&#34; celenium.py&#34;,第20行,in       browser.find_element_by_css_selector(&#34;#topnav1&gt;一种&#34)。单击()     在find_element_by_css_selector中的文件&#34; C:\ Users \ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py&#34;,第457行       return self.find_element(by = By.CSS_SELECTOR,value = css_selector)     文件&#34; C:\ Users \ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py&#34;,第791行,​​在find_element中       &#39;价值&#39;:价值})[&#39;价值&#39;]     文件&#34; C:\ Users \ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py&#34;,第256行,执行中       self.error_handler.check_response(响应)     文件&#34; C:\ Users \ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ errorhandler.py&#34;,第194行,在check_response中       提出exception_class(消息,屏幕,堆栈跟踪)   selenium.common.exceptions.NoSuchElementException:消息:无法找到元素:#topnav1&gt; a

browser.find_element_by_css_selector("td.topnavoff#topnav1 > a ").click()
  

追踪(最近一次通话):     File&#34; celenium.py&#34;,第22行,in       browser.find_element_by_css_selector(&#34; td.topnavoff#topnav1&gt; a&#34;)。click()     在find_element_by_css_selector中的文件&#34; C:\ Users \ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py&#34;,第457行       return self.find_element(by = By.CSS_SELECTOR,value = css_selector)     文件&#34; C:\ Users \ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py&#34;,第791行,​​在find_element中       &#39;价值&#39;:价值})[&#39;价值&#39;]     文件&#34; C:\ Users \ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py&#34;,第256行,执行中       self.error_handler.check_response(响应)     文件&#34; C:\ Users \ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ errorhandler.py&#34;,第194行,在check_response中       提出exception_class(消息,屏幕,堆栈跟踪)   selenium.common.exceptions.NoSuchElementException:消息:无法找到元素:td.topnavoff #topnav1&gt;一个

路由器站点的代码段:

<table id=topnav_container2 cellspacing=0 border=0>
        <tbody>
        <tr>
          <td style="width: 1px; background-color: white"></td>
          <td id=modnum rowspan=2><img alt="" src="pic/DSL-G225.gif"></td>
          <td style="width: 2px; background-color: white"></td>
          <td id=topnav0 class=topnavon width=140 rowspan=2><a href="javascript:ontopnav('0')" >Setup</a></td>
          <td style="width: 2px; background-color: white"></td>
          <td id=topnav1 class=topnavoff width=140><a href="javascript:ontopnav('1')">Advanced</a></td>
          <td style="width: 2px; background-color: white"></td>
          <td id=topnav2 class=topnavoff width=140><a href="javascript:ontopnav('2')">Maintenance</a></td>
          <td style="width: 2px; background-color: white"></td>
          <td id=topnav3 class=topnavoff width=140><a href="javascript:ontopnav('3')">Status</a></td>
          <td style="width: 2px; background-color: white"></td>
          <td id=topnav4 class=topnavoff width=140><a href="javascript:ontopnav('4')">Help</a></td>
          <td style="width: 2px; background-color: white"></td>
        </tr>
        <tr>
          <td></td>
          <td style="background-color: #404343"></td>
          <td style="background-color: #404343"></td>
          <td style="background-color: #404343"></td>
          <td style="background-color: #404343"></td>
          <td style="background-color: #404343"></td>
          <td style="background-color: #404343"></td>
          <td style="background-color: #404343"></td>
          <td style="background-color: #404343"></td>
          <td style="background-color: #404343"></td>
          <td style="background-color: #404343"></td>
        </tr>
        </tbody>
      </table>

1 个答案:

答案 0 :(得分:0)

要点击link,文字为 Advanced ,您可以使用以下任意一行代码:

  • css_selector

    browser.find_element_by_css_selector("table#topnav_container2 tr td.topnavoff#topnav1 > a").click()
    
  • xpath

    browser.find_element_by_xpath("//table[@id='topnav_container2']//tr//td[@class='topnavoff' and @id='topnav1']/[contains(.,'Advanced')]").click()    
    
  

注意:文本为 link Advanced位于<a>标记内。因此,您必须尝试调用强大的 click()方法,而不是 send_keys(Keys.RETURN) send_keys(Keys.ENTER) ,如下所示:< / p>

browser.find_element_by_link_text("Advanced").click()