自从上次写了校园网的软件,就更想深入的去优化和修改。 优化内容: 1.如果浏览器有问题原来将直接报错,现在已经全部可控制 2.浏览器登录完毕后,点击叉号会卡顿关闭 3.浏览器调用速度慢,整体代码复用度低 4.将账号和密码放在最前面,方便修改
新增内容: 1.这次采用了新的类的写法,采用python Selenium 4.15.2去写。 2.这次支持修改校园网地址,支持自定义登录内容
原本是想直接调用文件夹下的chromedrive,后来想还是调用系统自有的为上策 这次就不做多的介绍,要看介绍请看上一期https://blog.nuoyis.net/1053.html 这次就直接看代码
main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 import getpassimport osimport sysimport timefrom nuofunction import lianwangif __name__ == "__main__" : xiaoyuanurl = "http://172.17.1.2" xiaoyuanusername = "" xiaoyuanpassword = "" nuo = lianwang() if not (nuo.geturl(xiaoyuanurl)): print ("网络异常或不是校园网,请检查" ) exit(1 ) password = getpass.getpass("请输入分配给的给予的安全密码:" ) if password != "nu23o09" : print ("密码错误" ) input ("按任意键关闭" ) exit(1 ) if not (nuo.openurl(xiaoyuanurl)): print ("浏览器内核调用异常,请检查" ) input ("按任意键关闭" ) exit(1 ) print ("正在静默登陆中,请稍后...." ) if True in nuo.find("xpath" , "/html/body/div/div[1]/div[5]/input" ): print ("检测到登录,开始执行" ) nuo.shell("xpath" , "click" , "/html/body/div/div[1]/div[5]/input" ) else : print ("未检测到登录,继续执行" ) nuo.shell("xpath" , "click" , "/html/body/div/div[1]/form/input[1]" ) nuo.shell("xpath" , "clear" , "/html/body/div/div[1]/form/input[1]" ) nuo.shell("xpath" , "element" , "/html/body/div/div[1]/form/input[1]" , xiaoyuanusername) nuo.shell("xpath" , "click" , "/html/body/div/div[1]/form/input[2]" ) nuo.shell("xpath" , "clear" , "/html/body/div/div[1]/form/input[2]" ) nuo.shell("xpath" , "element" , "/html/body/div/div[1]/form/input[2]" , xiaoyuanpassword) nuo.shell("xpath" , "click" , "/html/body/div/div[1]/form/button" ) nuo.closeurl() print ("登录完毕,正在调用系统浏览器用于您检测是否登录成功" ) os.popen("start " + xiaoyuanurl) input ("按任意键关闭" )
nuofunction.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 import osimport requestsimport timeimport urllib3from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.chrome.options import Options as ChromeOptionsfrom selenium.webdriver.firefox.options import Options as FirefoxOptionsfrom selenium.webdriver.edge.options import Options as EdgeOptionsclass lianwang : def geturl (self, url ): try : http = urllib3.PoolManager() http.request('GET' , url) return 1 except Exception as e: return 0 def touoptions (self ): self .options.add_argument("--incognito" ) self .options.add_argument('--no-sandbox' ) self .options.add_argument('--headless' ) self .options.add_argument('--disable-gpu' ) self .options.add_argument('--ignore-certificate-errors' ) self .options.add_experimental_option("excludeSwitches" , ["enable-automation" ]) self .options.add_experimental_option("useAutomationExtension" , False ) return True def openurl (self, url ): """ 打开网页 :param url: :return: 返回 webdriver """ try : print ("正在使用谷歌浏览器" ) self .options = ChromeOptions() self .touoptions() self .driver = webdriver.Chrome(options=self .options) self .driver.get(url) return True except : print ("谷歌浏览器调用失败,正在调用其他浏览器" ) try : print ("正在使用火狐浏览器" ) self .options = FirefoxOptions() self .touoptions() self .driver = webdriver.Firefox(options=self .options) self .driver.get(url) return True except : print ("火狐浏览器调用失败,正在调用其他浏览器" ) try : print ("正在使用Edge浏览器" ) self .options = EdgeOptions() self .touoptions() self .driver = webdriver.Edge(options=self .options) self .driver.get(url) return True except : print ("Edge浏览器调用失败" ) return False def find (self, type , text ): """ 查找网页元素 """ try : if type == 'id' : elem = self .driver.find_element(By.ID, text) elif type == 'name' : elem = self .driver.find_element(By.NAME, text) elif type == 'class' : elem = self .driver.find_element(By.CLASS_NAME, text) elif type == 'xpath' : elem = self .driver.find_element(By.XPATH, text) elif type == 'css' : elem = self .driver.find_element(By.CSS_SELECTOR, text) else : return False , 0 except Exception as e: return False , 0 return True , elem def shell (self, type1, type2, text1, text2='' ): """ 综合判断并执行区 """ _isOK, _strLOG = self .find(type1, text1) if not _isOK: return False elem = _strLOG if type2 == "click" : try : elem.click() except Exception: return False return True elif type2 == "clear" : try : elem.clear() except Exception: return False return True elif type2 == "element" : try : elem.send_keys(text2) except Exception: return False return True def closeurl (self ): self .driver.quit()
由诺依阁 提供Hexo转Typecho软件支持