Selenium模块
- 便捷的获取网站中动态加载的数据
- 便捷实现模拟登录
基于浏览器自动化的一个模块
selenium使用流程:
- 模块安装
- 下载驱动程序,chromedriver
- 实例化一个浏览器对象
- 编写实现自动化的代码
# 药监局案例from selenium import webdriverfrom lxml import etreebro = webdriver.Chrome(executable_path='./chromedriver')# 让浏览器发起一个指定url请求bro.get('url')page_text = bro.page_source# 解析企业名称tree = etree.HTML(page_text)li_list = tree.xpath('//ul[@id="gzlist"]/li')for li in li_list:li.xpath('./dl/@title')[0]print(name)sleep(5)bro.quit()bro.get('https://www.taobao.com/')# 标签定位search_input = bro.find_element_by_id('q')# 标签交互search_input.send_keys('Iphone')# 点击搜索按钮btn = bro.find_element_by_css_selector('.btn-search')btn.click()sleep(5)bro.quit()
python+selenium自动化测试
设置鼠标,键盘事件
1、设置鼠标事件 (这些方法封装在ActionChains类中)
from selenium.webdriver.common.action_chains import ActionChains#鼠标悬停above = driver.find_element_by_link_text('体育')ActionChains(driver).move_to_element(above).perform()#右键点击right_click = driver.find_element_by_link_text('科技')ActionChains(driver).context_click(right_click).perform()#双击事件double_click = driver.find_element_by_link_text('游戏')ActionChains(driver).double_click(double_click).perform()#鼠标拖放事件element = driver.find_element_by_link_text('汽车')#鼠标拖动的源元素target = driver.find_element_by_id('ww')#鼠标拖动的目标元素ActionChains(driver).drag_and_drop(element,target).perform()6、将.py文件打包成exe文件用pip安装pyinstaller, pip install pyinstaller然后点击需要打包的文件夹,右键+shift,在命令窗口输入pyinstaller -F 文件名.py 打包后的exe文件出现在 dist 文件夹中2、设置键盘事件(这些方法封装在Keys类中)from selenium.webdriver.common.keys import Keys#设置键盘事件 #键盘删除事件driver.find_element_by_id('kw').send_keys('Selenium2.00')time.sleep(5)driver.find_element_by_id('kw').send_keys(Keys.BACKSPACE)#空格事件driver.find_element_by_id('kw').send_keys(Keys.SPACE)time.sleep(5) driver.find_element_by_id('kw').send_keys('Selenium2.00')#全选事件driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'a') time.sleep(3)#复制事件driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'c') time.sleep(3)driver.get(second_url='http://www.hao123.com')#粘贴事件driver.find_element_by_id('search-input').send_keys(Keys.CONTROL,'v') time.sleep(2)driver.find_element_by_class_name('button-hook').click()
模拟登录豆瓣
要点:
- 要切换到iframe才能定位到里面的元素
第一阶段:中间需手动滑动验证码
# encoding: utf-8"""@author: linpions@software: PyCharm@file: 豆瓣网登录.py@time: 2021-12-27 19:55"""import timeimport requestsfrom selenium import webdriverurl = "https://www.douban.com/"username = 'username'password = 'password'browser = webdriver.Chrome(r'C:\Users\Administrator\Desktop\LK_Projs\LearningSpider\selenium基础\chromedriver.exe')def login():"""通过selenium登录豆瓣"""browser.get(url)time.sleep(2)browser.switch_to.frame(browser.find_element_by_tag_name('iframe')) # 切换到iframe# 找到密码登录的元素login_ele = browser.find_element_by_xpath('/html/body/div[1]/div[1]/ul[1]/li[2]')login_ele.click()username_ele = browser.find_element_by_xpath("//*[@id='username']")password_ele = browser.find_element_by_xpath("//*[@id='password']")username_ele.send_keys(username)password_ele.send_keys(password)submit_btn = browser.find_element_by_xpath("/html/body/div[1]/div[2]/div[1]/div[5]/a")submit_btn.click()time.sleep(2)cookies = browser.get_cookies()cookie_dict = {}for item in cookies:cookie_dict[item['name']] = item['value']print(browser.get_cookies()) # 获取登录后cookieres = requests.get(url, cookies=cookie_dict)print(res.text)if "bobby_liyao" in res.text:print("已经登录")if __name__ == '__main__':login()
第二阶段:待定
模拟登录B站—滑动验证码
破解方案:
- 鼠标移动到正确的元素上,显示出没有缺口的图片并下载
- 点击元素显示出有缺口的图片并下载
- 对比两张图片找出缺口的移动像素
- 拖动元素
