我一直在尝试制作一个python脚本,该脚本将登录到我的路由器页面,记录所有连接的设备,然后按其连接名称显示它们。 我制作了一个脚本,如下所示:
from requests import session
from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
url = "http://192.168.1.1/login/login.html"
browser = webdriver.Chrome()
wait = WebDriverWait(browser, 100)
browser.get(url)
kad = browser.find_element_by_id("AuthName")
password = browser.find_element_by_id("AuthPassword")
kad.send_keys("MyRouterLoginName")
password.send_keys("MyRouterLoginPassword")
buton = browser.find_element_by_xpath("/html/body/div[2]/div[2]/div[2]/div/ul/li/div[3]/form/fieldset/ul/li[6]/input") #this is my login button
buton.click()
homepage = "http://192.168.1.1/index.html"
browser.get(homepage) #Router asks for changing default password, i skip it like that
sleep(5)
verify = browser.find_element_by_css_selector('body')
print(verify.text) #see my later explanation
xpathmethod = browser.find_element_by_xpath("/html/body/div[3]/div/div/div/div[3]/div/table/tbody/tr/td[3]/div/ul[1]/li[1]/div[2]/a")
print(xpathmethod.text)
print("Finding by css")
content = browser.find_element_by_css_selector('.addmenu')
print(content.text)
验证行是要确保网页已完全加载,但这是问题所在,在网页加载时,它首先加载默认菜单项(例如连接状态,网络设置,故障排除等),然后加载要加载的设备当前已连接。 Webdriver无法识别连接的设备部分,并给出“无法定位元素”错误。 我尝试了xpath和CSS选择器方法,但两者都给了我相同的结果。 抱歉,我无法完全粘贴html,但这是chrome在检查元素时给我的路径
html body div.index div div #mainframe html body div div #contentPanel #mapView div div table tbody tr td div #wlInfo li div a
答案 0 :(得分:0)
您需要这样的东西:
try:
# Load page
browser.get("http://192.168.1.1/index.html")
# Wait 10 seconds before element can be located on the page
# For example, <div class="example"> -- first div with class "example"
WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, ".//div[@class='example'][1]")))
except Exception as e:
# Catch an exception in case of element unavailability
print ("Page load error: {}".format(e.message))
答案 1 :(得分:0)
找到了获取连接设备列表的另一种方法。 调制解调器有一个ConnectionStatus页面,在该页面上我可以看到完整列表,其中包括单个字符串中的mac地址和其他详细信息。 现在我需要解析它们。还会对此产生另一个问题。