selenium是自动化工具,广泛应用于爬虫、自动化框架等。
'''
尚需深入:
1、键盘模拟组合操作深入:除CTRL+以外的其他操作
2、鼠标动作链的具体应用:移动、双击、右击、按压、拖放
3、其他处理:弹窗、页面切换、显式隐式等待。
4、模拟登陆豆瓣
'''
# =============================================================================
# #selenium入门操作
# =============================================================================
from selenium import webdriver #引入浏览器包
from selenium.webdriver import ActionChains #引入鼠标操作包 双击、右击、拖动、按压等
from selenium.webdriver.common.keys import Keys #引入键盘按键操作包 Ctrl+、alt+等
import time
#浏览器选项 及 创建浏览器
option=webdriver.ChromeOptions() #无头浏览选项
option.add_argument('headless') #添加无头模式选线
#driver=webdriver.Chrome(chrome_options=option) #创建Chrome浏览器 无头浏览模式
driver=webdriver.Chrome() #创建Chrome浏览器
#driver=webdriver.PhantomJS() #创建PhantomJS透明浏览器
#页面基本操作
driver.get('http://www.baidu.com') #打开网址,获取页面内容
#data=driver.find_element_by_id('wrapper').text #获取页面id="wrapper"的文本内容
#print(data)
#print(driver.title) #打印页面标题
#driver.save_screenshot('baidu.png') #截屏操作 无头模式也可以截屏
#print(driver.page_source) #页面源代码 打印
#print(driver.get_cookies()) #获取当前页面cookies
#print(driver.current_url) #获取当前页面url
#driver.set_window_size(800,600) #设置窗口大小操作
#driver.maximize_window() #设置全屏操作
#driver.refresh() #刷新操作
driver.find_element_by_id('kw').send_keys('血皇敖天') #定位输入框,并输入 字符创
driver.find_element_by_id('su').click() #单击操作 定位按钮
time.sleep(2)
#模拟键盘组合操作
#from selenium.webdriver.common.keys import Keys #引入键盘按键操作包 Ctrl+、alt+等
shurukuang=driver.find_element_by_id('kw') #定位输入框
shurukuang.send_keys(Keys.CONTROL,'a') #Ctrl+A键盘操作
shurukuang.send_keys(Keys.CONTROL,'x') #Ctrl+x键盘操作
shurukuang.send_keys('寒天青岚') #输入文字操作
shurukuang.send_keys(Keys.RETURN) #确认键 模拟操作
time.sleep(2)
shurukuang.clear() #清空 操作
#鼠标动作链操作 移动、单击、双击、右击、按压、拖动
#from selenium.webdriver import ActionChains #引入鼠标操作包 引入鼠标操作包 双击、右击、拖动、按压等
#移动鼠标 到指定位置
srk=driver.find_element_by_xpath('//*[@id="kw"]') #先定位
ActionChains(driver).move_to_element(srk).perform() #移动鼠标 移动到定位元素位置
srk.send_keys(Keys.CONTROL,'V') #Ctrl+V操作
time.sleep(2)
bdyx=driver.find_element_by_xpath('//*[@id="su"]')
ActionChains(driver).move_to_element(bdyx).click(bdyx).perform() #单击 移动并单击
#ActionChains(driver).move_to_element(bdyx).double_click(bdyx).perform() #双击 移动并双击
#ActionChains(driver).move_to_element(bdyx).context_click(bdyx).perform() #右击 移动并右击
#ActionChains(driver).move_to_element(bdyx).click_and_hold(bdyx).perform() #按压 单击并保持
#将A1拖动到A2位置
#A1=driver.find_element_by_xpath('')
#A2=driver.find_element_by_xpath('')
#ActionChains(driver).drag_ang_drop(A1,A2).perform()
#下拉菜单处理
#from selenium.webdriver.support.ui import Select
#select=Select(driver.find_element_by_name('status')) #首先找到下拉菜单
#select.select_by_index(1) #根据索引 选择
#select.select_by_value('0') #根据值(属性值,并非下拉菜单的值) 选择
#select.select_by_visible_text #根据文字 选择
#select.deselect_all() #全部取消 选择
#弹窗处理???
#alert=driver.switch_to_alert()
#浏览器页面切换???
#driver.switch_to.window('window name')
#或另一种方法:
#for handle in driver.window_handles:
# print(handle)
# driver.switch_to_window(handle)
#页面前进和后退
driver.back() #后退
time.sleep(2) #暂停2秒
driver.forward() #前进
#获取页面Cookies
#可以使用get_cookies()获取页面的所有Cookies,然后for循环得出每个页面Cookie
#for cookie in driver.get_cookies():
# print('{}={}'.format(cookie['name'],cookie['value']))
#driver.delete_cookie('cookie名称') #删除指定名称的cookie
#driver.delete_all_cookies() #删除所有cookies
time.sleep(3)
driver.quit() #退出浏览器
# =============================================================================
# #页面等待??? 两种等待方式:显式 和 隐式
# #显式:指定某一条件,直到条件成立后,才能继续执行下一步
# #隐式:等待特定的时间
# =============================================================================
##显式等待使用 WebDriverWait类,包含四个参数
#from selenium import webdriver
#from selenium.webdriver.common.by import By
#from selenium.webdriver.support.ui import WebDriverWait
#from selenium.webdriver.support import expected_conditions as EC
#
#driver=webdriver.Chrome() #创建Chrome浏览器
#driver.get('http://www.baidu.om')
#
#try:
# #查找页面元素id=myDynamicElement,出现则返回;如果超过10秒,则报出异常。
# element=WebDriverWait(driver,5).until(
# EC.presence_of_element_located((By.ID,'myDynamicElement'))
# )
#finally:
# driver.quit()
#
#
##隐式等待 使用 implicitly_wait()方法
##driver.implicitly_wait(10) #隐式等待10秒
# =============================================================================
# #selenium爬虫示例:
# =============================================================================
driver1=webdriver.Chrome() #创建Chrome浏览器
driver1.get("https://www.jianshu.com/p/aa4a1829840f") #打开网址,获取页面
driver1.implicitly_wait(2) #隐式等待2秒
#获取元素文本内容,用xpath
author=driver1.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[1]/div/span/a').text
date=driver1.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[1]/div/div/span[2]').text
word=driver1.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[1]/div/div/span[3]').text
view=driver1.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[1]/div/div/span[4]').text
comment=driver1.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[1]/div/div/span[5]').text
like=driver1.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[1]/div/div/span[6]').text
money=driver1.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[1]/div/div/span[7]').text
print(author, date, word, view, comment, like, money) #输出内容
time.sleep(2) #暂停3秒
driver1.quit() #退出浏览器
#定位UI元素
#findn_element_by_id #通过id标签值定位
#findn_element_by_name #通过name标签值定位
#findn_element_by_tag_name #通过标签名来定位
#findn_element_by_xpath #通过xpath地址来定位
#findn_element_by_link_text #通过链接文本值定位
#findn_element_by_partial_link_text #通过部分链接文本值定位
#findn_element_by_class_name #通过Class名称定位
#findn_element_by_css_selector #通过css定位
# =============================================================================
# #selenium模拟登陆示例 (???)
# =============================================================================
#driver2=webdriver.Chrome()
#driver2.get('http://www.douban.com')
#driver2.maximize_window()
#
##mmdl=driver2.find_element_by_xpath('/html/body/div[1]/div[1]/ul[1]/li[2]')
##mmdl.click()
#driver2.find_element_by_name('username').send_keys('29xxxx68@qq.com')
#driver2.find_element_by_name('password').send_keys('xxxxx')
#driver2.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[5]/a').click()
#
#time.sleep(2)
#driver2.save_screenshot('doubandenglu.png')
创建测试用例
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import unittest #引入测试用例模块,注意测试方法使用以 “test”字母开头。
import time
# =============================================================================
# 创建测试用例框架 ,输出建议的测试用例报告
# =============================================================================
class PythonOrgSearch(unittest.TestCase): #继承测试用例模块
def setUp(self): #setUp()方法初始化,测试方法执行前执行一遍,即先创建浏览器。
self.driver=webdriver.Chrome()
def test_search_in_python_org(self): #测试方法,使用以为“test”字母开头。
driver=self.driver
driver.get('http://baidu.com')
#assert '百度' in driver.title
srk=driver.find_element_by_xpath('//*[@id="kw"]')
srk.clear()
srk.send_keys('血皇敖天')
srk.send_keys(Keys.ENTER)
#assert "xxx" in driver.page_source
time.sleep(5)
def tearDown(self):
self.driver.quit()
if __name__=="__main__":
unittest.main()