Python Selenium:我可以't find an element on my router '网站'

我正在尝试编写一个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)

这是我的路由器中“高级”选项卡的代码:

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

已编辑:代码和错误 .

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

Traceback(最近一次调用最后一次):文件“celenium.py”,第22行,在browser.find_element_by_link_text(“Advanced”) . click()文件“C:\ Users \ Aesop \ AppData \ Local \ Programs \ Python \ Python36 -32 \ lib中\站点包\硒\的webdriver \远程\ webdriver.py “管线337,在返回find_element_by_link_text self.find_element(由= By.LINK_TEXT,值= LINK_TEXT)文件” C:\用户\伊索\应用程序数据\ local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py“,第791行,在find_element'value':value})['value']文件”C:\用户\ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py“,第256行,执行self.error_handler.check_response(响应)文件”C: \ Users \ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ errorhandler.py“,第194行,在check_response中引发exception_class(message,screen,stacktrace)selenium . common.exceptions.NoSuchElementException:消息:无法找到元素:Advanc ED


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

回溯(最近通话最后一个):文件 “celenium.py”,第20行,在browser.find_element_by_css_selector( “#topnav1>一”)点击()文件“C:\用户\伊索\应用程序数据\本地\程序\蟒\ Python36-32 \ lib中\站点包\硒\的webdriver \远程\ webdriver.py “线路457,在返回find_element_by_css_selector self.find_element(由= By.CSS_SELECTOR,值= css_selector)文件” C:\用户\ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py“,第791行,在find_element'value':value})['value']文件” C:\ Users \ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py“,第256行,执行self.error_handler.check_response(response)文件“C:\ Users \ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ errorhandler.py”,第194行,在check_response中引发exception_class(消息,屏幕,堆栈跟踪) )selenium.common.exceptions.NoSuchElementException:消息:无法找到e lement:#topnav1> a


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

回溯(最近通话最后一个):文件 “celenium.py” 22行,在browser.find_element_by_css_selector( “td.topnavoff#topnav1> A”) . 点击()文件“C:\用户\伊索\应用程序数据\本地\程序\的Python \ Python36-32 \ lib中\站点包\硒\的webdriver \远程\ webdriver.py “线路457,在返回find_element_by_css_selector self.find_element(由= By.CSS_SELECTOR,值= css_selector)文件” C: \ Users \ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py“,第791行,在find_element'value':value})['value' ]文件“C:\ Users \ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py”,第256行,执行self.error_handler.check_response(响应)文件“C:\ Users \ Aesop \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ errorhandler.py”,第194行,在check_response中引发exception_class(消息, screen,stacktrace)selenium.common.exceptions.NoSuchElementException:消息:Una找到元素:td.topnavoff#topnav1> a


来自路由器站点的代码段:

<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)

2 years ago

要单击 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()

注意:带有高级文本的链接位于<a>标记内 . 因此,您必须尝试调用强大的click()方法而不是send_keys(Keys.RETURN)或send_keys(Keys.ENTER),如下所示:

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