Selenium模块
- 便捷的获取网站中动态加载的数据
- 便捷实现模拟登录
基于浏览器自动化的一个模块
selenium使用流程:
- 模块安装
- 下载驱动程序,chromedriver
- 实例化一个浏览器对象
- 编写实现自动化的代码
# 药监局案例
from selenium import webdriver
from lxml import etree
bro = 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 time
import requests
from selenium import webdriver
url = "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()) # 获取登录后cookie
res = requests.get(url, cookies=cookie_dict)
print(res.text)
if "bobby_liyao" in res.text:
print("已经登录")
if __name__ == '__main__':
login()
第二阶段:待定
模拟登录B站—滑动验证码
破解方案:
- 鼠标移动到正确的元素上,显示出没有缺口的图片并下载
- 点击元素显示出有缺口的图片并下载
- 对比两张图片找出缺口的移动像素
- 拖动元素