我正在尝试编写一个 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 asAdvanced
is within an<a>
tag. Hence you must try to invoke the powerful click() method instead ofsend_keys(Keys.RETURN)
orsend_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/