Python + Selenium : I can't find an element on my router 'site'

标签 python selenium xpath automation

我正在尝试编写一个 Python 脚本来自动从我的路由器站点 (10.0.0.2) 更改我的 Wi-Fi 密码。我正在使用 Selenium,但由于找不到某些元素而一直碰壁。非常感谢您的帮助。我将在下面提供所有必要的调试资源:

我通过 XPath 查找元素成功登录到我的路由器。

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

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 (most recent call last): File "celenium.py", line 22, in browser.find_element_by_link_text("Advanced").click() File "C:\Users\Aesop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 337, in find_element_by_link_text return self.find_element(by=By.LINK_TEXT, value=link_text) File "C:\Users\Aesop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 791, in find_element 'value': value})['value'] File "C:\Users\Aesop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 256, in execute self.error_handler.check_response(response) File "C:\Users\Aesop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: Advanced


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

Traceback (most recent call last): File "celenium.py", line 20, in browser.find_element_by_css_selector("#topnav1>a").click() File "C:\Users\Aesop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 457, in find_element_by_css_selector return self.find_element(by=By.CSS_SELECTOR, value=css_selector) File "C:\Users\Aesop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 791, in find_element 'value': value})['value'] File "C:\Users\Aesop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 256, in execute self.error_handler.check_response(response) File "C:\Users\Aesop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: #topnav1>a


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

Traceback (most recent call last): File "celenium.py", line 22, in browser.find_element_by_css_selector("td.topnavoff#topnav1 > a ").click() File "C:\Users\Aesop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 457, in find_element_by_css_selector return self.find_element(by=By.CSS_SELECTOR, value=css_selector) File "C:\Users\Aesop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 791, in find_element 'value': value})['value'] File "C:\Users\Aesop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 256, in execute self.error_handler.check_response(response) File "C:\Users\Aesop\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: 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>

最佳答案

点击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()    
    

Note : The link with text as Advanced is within an <a> tag. Hence you must try to invoke the powerful click() method instead of send_keys(Keys.RETURN) or send_keys(Keys.ENTER) as follows :

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

关于Python + Selenium : I can't find an element on my router 'site' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47990341/

相关文章:

Python 按顺序将 2 个列表和 Pandas DataFrame 写入 csv/excel

testing - Selenium 服务器-firefoxProfileTemplate 无法工作

xml - 计算 XPath 属性中字符串的出现次数

xml - XPath: contains(./text(), 'str' ) 将只查看第一个文本后代

python - 如何在 Python 中读取主目录

python - 从 pandas 数据帧创建字典,其中值是索引

python - Flask-Testing 和 Flask-SQLAlchemy : first_or_404()

python - Selenium 与Python : collecting an email from a form with read only

java - 在 TestNG 中多次使用一个类

python - 解析由标签分隔的部分