簡體   English   中英

Python + Selenium:我在路由器'site'上找不到一個元素

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

我正在嘗試編寫一個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()

回溯(最近一次調用最后一次):文件“celenium.py”,第22行,在browser.find_element_by_link_text(“高級”)中。單擊()文件“C:\\ Users \\ Aesop \\ AppData \\ Local \\ Programs \\ Python \\ Python36- 32 \\ lib \\ site-packages \\ selenium \\ webdriver \\ remote \\ webdriver.py“,第337行,在find_element_by_link_text中返回self.find_element(by = By.LINK_TEXT,value = link_text)文件”C:\\ Users \\ Aesop \\ AppData \\本地\\ 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:\\用戶\\ 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:消息:無法找到元素:高級


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

回溯(最近一次調用最后一次):在browser.find_element_by_css_selector(“#topnav1> a”)中的文件“celenium.py”,第20行。單擊()文件“C:\\ Users \\ Aesop \\ AppData \\ Local \\ Programs \\ Python \\ python36-32 \\ lib \\ site-packages \\ selenium \\ webdriver \\ remote \\ webdriver.py“,第457行,在find_element_by_css_selector中返回self.find_element(by = By.CSS_SELECTOR,value = 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(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:消息:無法找到ele :#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”).click()文件“C:\\ Users \\ Aesop \\ AppData \\ Local \\程序\\ Python \\ Python36-32 \\ lib \\ site-packages \\ selenium \\ webdriver \\ remote \\ webdriver.py“,第457行,在find_element_by_css_selector中返回self.find_element(by = By.CSS_SELECTOR,value = 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(響應) )文件“C:\\ Users \\ Aesop \\ AppData \\ Local \\ Programs \\ Python \\ Python36-32 \\ lib \\ site-packages \\ selenium \\ webdriver \\ remote \\ errorhandler.py”,第194行,在check_response中引發exception_class(消息,屏幕) ,stacktrace)selenium.common.exceptions.NoSuchElementException:消息:Unabl e找到元素: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>

要單擊帶有Advanced文本的link ,您可以使用以下任何代碼行:

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

注意 :帶有Advanced文本的link位於<a>標記內。 因此,您必須嘗試調用強大的click()方法而不是send_keys(Keys.RETURN)send_keys(Keys.ENTER) ,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM