Why?
原理
基于Selenium实现dvwa_ui
问题:
pip uninstall selenium # 卸载已安装版本 pip install selenium==4.1.1 # 安装指定版本 tips:
from selenium import webdriver import time # 第一步,先实例化webdriver对象,用于初始化浏览器操作 # 默认情况下,建议将chromedriver.exe等放在PATH环境变量的某个目录中,否则需要在参数中指定execute_path='C:/xxx/xxx.exe' # driver = webdriver.Chrome(executable_path='C:/chromedriver.exe') driver = webdriver.Chrome() # 使用火狐 # driver=webdriver.Firefox() # 最大化浏览器窗口 driver.maximize_window() time.sleep(2) # 打印网页标题 print(driver.title) # 打印网页源码 print(driver.page_source) # 刷新 driver.refresh() # 后退 driver.back() # 前进 driver.forward() # 获取对应的所有cookie driver.get_cookies() # 添加cookie # 关闭浏览器窗口 # 访问目标网站的页面地址 url="http://www.myfsec.com/login.php" driver.get(url) # 第二步:利用DOM的识别机制,去识别和操作页面元素 # 旧方法,将弃用 # driver.find_element_by_name('username').send_keys('admin') # driver.find_element_by_name('password').send_keys('password') driver.find_element('name','username').send_keys('admin') driver.find_element('name','password').send_keys('password') # 将弃用 # 根据xpath与css选择器定位元素 # driver.find_element_by_xpath("//input[@id='verifycode']").secd_keys('0000') # driver.find_element_by_xpath('//*[@id="content"]/form/fieldset/p/input').click() # driver.find_element_by_css_selector("#content > form > fieldset > p > input[type=submit]") # 推荐使用 # driver.find_element('xpath',"//*[@id='content']/form/fieldset/p/input").click() driver.find_element('css selector',"#content > form > fieldset > p > input[type=submit]").click() # # 打印网页标题 # print(driver.title) # # 打印网页源码 # print(driver.page_source) # 判断是否登陆成功,可以看网页中的某个元素是否存在 try: driver.find_element("id","main_body") print("登陆成功") except: print("登陆失败") # 或者 if "Welcome to Damn Vulnerable Web Application!" in driver.page_source: print("登陆成功") else: print("登陆失败") driver.close() chromdriver驱动下载:(谷歌)
geckodriver驱动下载(火狐)
发布 ·Mozilla/GeckoDriver (github.com)
补充,selenium操作windows–UIAutomation
其实使用selenium操作windows窗口最主要的的是像浏览器的F12一样,识别他的布局结构,从而获取相应的元素进行操作,因此我们需要用到一个工具:UISpy

例如:驱动windows下的wechat

import uiautomation,time def get_moment_list(moment): moment_list=moment.ListControl(Name="朋友圈").GetChildren()# 获取朋友圈列表,目前只能获取看到的前几条,后面的需要滚动条滚动才能获取,滚动还没实现 return moment_list # 定位到朋友圈框 def locate_wechat_moment(): wechat=uiautomation.WindowControl(Name="微信") # 加载微信框 wechat.ButtonControl(Name="朋友圈").Click() # 点击朋友圈按钮 # time.sleep(1) # 等待1秒 moment=uiautomation.WindowControl(Name="朋友圈") # 加载朋友圈框 moment.ButtonControl(Name="刷新").Click() # 点击刷新按钮 moment_list=get_moment_list(moment)[1:] print(len(moment_list)) moment.WheelDown(wheelTimes=12, interval=0.1, waitTime=0.5) close_moment_btn=moment.ButtonControl(Name="关闭") close_location=close_moment_btn.BoundingRectangle print(close_location) while True: moment_list=get_moment_list(moment) moment_bottom=moment.BoundingRectangle print(moment_bottom) for friend in moment_list: friend_bottom=friend.BoundingRectangle print(friend_bottom) print(friend.Name) try: if friend_bottom.bottom<40: pass else: friend.ButtonControl(Name="评论").Click() # 点击评论按钮,目的是为了显示出点赞按钮 moment.ButtonControl(Name="取消").Click() # 点击赞按钮 print("点赞成功") except: print("点赞失败") finally: y=friend.BoundingRectangle.bottom print(y) moment_list=get_moment_list(moment) moment.WheelDown(wheelTimes=y//20, interval=0.1, waitTime=0.5) if __name__ == '__main__': locate_wechat_moment()