selenium

selenium简介

介绍

Selenium是一个用于Web应用程序测试的工具,是一个自动化测试工具,用来模拟用户正常访问浏览器。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

功能

1、框架底层使用JavaScript模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从终端用户的角度测试应用程序。

2、使浏览器兼容性测试自动化成为可能,尽管在不同的浏览器上依然有细微的差别。

3、使用简单,可使用Java,Python等多种语言编写用例脚本。

优势

Selenium 测试直接在浏览器中运行,就像真实用户所做的一样。Selenium 测试可以在 Windows、Linux 和 Macintosh上的 Internet Explorer、Chrome和 Firefox 中运行。其他测试工具都不能覆盖如此多的平台。使用 Selenium 和在浏览器中运行测试还有很多其他好处。

下面是主要的两大好处:
通过编写模仿用户操作的 Selenium 测试脚本,可以从终端用户的角度来测试应用程序。通过在不同浏览器中运行测试,更容易发现浏览器的不兼容性。Selenium 的核心,也称browser bot,是用 JavaScript 编写的。这使得测试脚本可以在受支持的浏览器中运行。browser bot 负责执行从测试脚本接收到的命令,测试脚本要么是用 HTML 的表布局编写的,要么是使用一种受支持的编程语言编写的。

基本使用

from selenium import webdriver

browser = webdriver.Chrome()
url = 'https://www.baidu.com'
# 访问首页
browser.get(url)

# 通过ip查找元素
input_ = browser.find_element_by_id("kw")

# 输入文本
input_.send_keys('selenium')

# 点击搜索
browser.find_element_by_id("su").click()

# 打印当前url
print(browser.current_url)

print('===='*20)

# 打印cookies
print(browser.get_cookies())

# 打印网页源代码
html = browser.page_source

# 关闭浏览器
browser.quit()  # browser.close()

获取单节点

from selenium import webdriver

url = 'https://www.baidu.com'
browser = webdriver.Chrome()

browser.get(url)

# by name
browser.find_element_by_name("wd").send_keys('python')

# by id
browser.find_element_by_id("su").click()

# 隐式等待
browser.implicitly_wait(5)

# by xpath
browser.find_element_by_xpath('//*[@id="kw"]').send_keys(' selenium')

browser.find_element_by_xpath('//*[@id="su"]').click()

browser.implicitly_wait(5)

browser.quit()

节点交互

import time
from selenium import webdriver

browser = webdriver.Chrome()

browser.get("https://www.baidu.com")

"""
selenium可以驱动浏览器来执行一些动作:
输入文字用send_keys()
清空文字用clear()
点击按钮用click()
"""

input = browser.find_element_by_id("kw")
input.send_keys("iPhone")   #在搜索框输入iPhone

input.clear()  # 清空搜索框的文字
time.sleep(2)
input.send_keys("iPad")  # 在搜索框输入iPad

button = browser.find_element_by_xpath('//*[@id="su"]')  # 获取点击按钮
button.click()  # 点击搜索

browser.quit()

动作链

from selenium import webdriver
from selenium.webdriver import ActionChains   # 引入动作链

browser = webdriver.Chrome()


url = "https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"

browser.get(url)

browser.switch_to.frame("iframeResult")  # 切换到元素所在的frame[框架]

"""
可以传入id、name、index以及selenium的WebElement对象,index从0开始
"""

source = browser.find_element_by_css_selector("#draggable") # 找到被拖拽对象
target = browser.find_element_by_css_selector("#droppable") # 找到目标

actions = ActionChains(browser)       # 声明actions对象
actions.drag_and_drop(source,target)  # 拖拽元素的起点和终点
actions.perform()  # 执行动作action.click_and_hold()    # 点击且长按,更多方法查看官方文档

browser.quit()

模拟页面下拉

from selenium import webdriver
from selenium.webdriver import ChromeOptions

options = ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])

browser = webdriver.Chrome(options=options)

url = "https://www.zhihu.com/explore"
browser.get(url)

browser.execute_script("window.scrollTo(0,document.body.scrollHeight)") # 将进度条下拉到最底部

browser.execute_script("alert('hello word')")  # 弹出alert提示窗

browser.quit()

截屏

# 截屏
import selenium
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.baidu.com')

driver.get_screenshot_as_file('baidu.png') # 截屏

# print(driver.get_screenshot_as_base64())  # 截屏,保存为base64编码的形式

driver.quit() # 关闭

截取长图

from selenium import webdriver

# phantomjs需自行下载
executable_path = "D:/phantomjs.exe"
browser = webdriver.PhantomJS(executable_path=executable_path)

browser.get('https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=python \
            &rn=&fenlei=256&oq=&rsv_pq=a4c7a3c300051269&rsv_t=196a2CXH3qH9pW88Do89NXbnSbvn5AmNMbKM \
            76qPEHDAcdDIpKC065%2BSSY8&rqlang=cn&rsv_enter=1&rsv_btype=i&rsv_dl=ib&inputT=1469')
# 最大化窗口
browser.maximize_window()

browser.save_screenshot('python.png')

browser.quit()

selenium三种等待方式

# 强制等待
import time
from selenium import webdriver

url = 'https://baidu.com'

browser = webdriver.Chrome()
browser.get(url)

# 等待五秒
time.sleep(5)

browser.close()
# 隐式等待
from selenium import webdriver

url = 'https://baidu.com'

browser = webdriver.Chrome()
browser.get(url)

# 等待五秒
browser.implicitly_wait(5)

browser.quit()  # browser.close()
# 显示等待
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait

url = 'https://baidu.com'

browser = webdriver.Chrome()
browser.get(url)

# 等待
WebDriverWait(browser, 20).until(lambda browser: browser.find_element_by_xpath('//*[@id="kw"]')).send_keys('python')
WebDriverWait(browser, 10).until(lambda browser: browser.find_element_by_xpath('//*[@id="su"]')).click()

browser.quit() 

你可能感兴趣的:(爬虫,selenium,python)