赞
踩
Selenium是一个浏览器自动化测试框架,是一款用于Web应用程序测试的工具。框架底层使用JavaScript模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从终端用户的角度测试应用程序。使浏览器兼容性测试自动化成为可能,尽管在不同的浏览器上依然有细微的差别。使用简单,可使用Java,Python等多种语言编写用例脚本。
以Chrome为例:
首先在pycharm中安装selenium软件包,版本不要太高,不然会闪退,测试是3.5版本。(补:后续更新到selenium3.10运行无影响)
然后http://chromedriver.storage.googleapis.com/index.html网站中找到对应版本的chromedriver下载win32就可以了,解压之后复制粘贴到项目文件夹的一级目录下。
准备工作完成。
先看下面一段代码
import urllib.request
url = 'https://www.jd.com'
response = urllib.requst.urlopen(url)
content = response.read().decode('utf-8')
print(content)
在控制台搜索J_seckill(京东秒杀模块的id),无匹配字段,原因是:模拟浏览器获取不了京东秒杀的内容,因为网站检测到了是模拟浏览器,所以需要用selenium。
selenium的使用会调用chrome,所以当弹出页面后需要在设置中将默认搜索引擎改成百度。
获取京东网站中的京东秒杀源码
# 导入selenium
from selenium import webdriver
# 创建浏览器对象
path = 'chromedriver.exe'
browser = webdriver.Chrome(path)
# 访问网站
url = 'https://www.jd.com'
browser.get(url)
# page_source获取网页源码
content = browser.page_source
print(content)
在控制台搜索J_seckill可以看到京东秒杀模块。
from selenium import webdriver url = 'https://www.jd.com' path = 'chromedriver.exe' browser = webdriver.Chrome(path) # 元素定位 # 根据id找到对象 id = browser.find_element_by_id('su') print(id) # 根据标签属性的属性值 name = browser.find_element_by_name('wd') print(name) # 根据xpath语句来获取对象 xpath = browser.find_element_by_xpath('//input[@id="su"]') print(xpath) # 根据标签的名字获取对象 button = browser.find_element_by_tag_name('input') print(button) # 使用bs4的语法获取对象 bs = browser.find_element_by_css_selector('#su') print(bs) # a标签 text = browser.find_element_by_link_text('新闻') print(text)
以百度首页为例
from selenium import webdriver path = 'chromedriver.exe' browser = webdriver.Chrome(path) url = 'http://www.baidu.com' browser.get(url) # 访问网站 # 根据id内容获取标签对象 input = browser.find_element_by_id('su') # 获取标签的属性 print(input.get_attribute('class')) # 获取标签的名字 print(input.tag_name) # 获取元素文本 a = browser.find_element_by_link_text('新闻') print(a.text)
模拟点击行为,进而操作浏览器
from selenium import webdriver # 创建浏览器对象 path = 'chromedriver.exe' browser = webdriver.Chrome(path) # url url = 'https://www.baidu.com' browser.get(url) import time # 睡眠两秒 防止操作过快被检测出来时爬虫,被封ip time.sleep(2) # 获取文本框的对象 input = browser.find_element_by_id('kw') # 在文本框中输入周杰伦 input.send_keys('周杰伦') time.sleep(2) # 获取百度一下的按钮 button = browser.find_element_by_id('su') # 点击按钮 button.click() time.sleep(2) # 滑到底部 js_bottom = 'document.documentElement.scrollTop=100000' browser.execute_script(js.bottom) time.sleep(2) # 获取下一页的按钮 next = browser.find_element_by_xpath('//a[@class="n"]') # 点击下一页 next.click() time.sleep(2) # 回到上一页 browser.back() time.sleep(2) # 再回去 browser.forward() time.sleep(3) browser.quit()
Phantomjs是一个无界面浏览器,支持页面元素查找,js的执行等,由于不进行css和gui渲染,运行效率比真实的浏览器快的多。
和使用Chrome类似,
即获取PhantomJs.exe的文件路径,
browser = webdriver.PhantomJs(path)
,
browser.get(url)
可以使用屏幕快照进行验证浏览器是否正常运行。
以百度搜索关键词为例
from selenium import webdriver url = 'https://www.baidu.com' path = 'phantomjs.exe' browser = webdriver.PhantomJS(path) browser.get(url) browser.save_screenshot('baidu.png') # 保存快照 import time # 获取百度搜索的搜索文本框 input = browser.find_element_by_id('kw') input.send_keys('昆凌') # 输入关键字‘昆凌’ time.sleep(2) # 睡眠两秒 browser.save_screenshot('kunling.png')
注:(1)phantonmjs因为某些原因已经停止更新,所以新版本的selenium不支持phantomjs,这里使用的是selenium3.5.0
所以现在都是使用handless
(2)当selenium更新到3.10时,输出窗口会出现“ UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless ’ ” 警告,不过不影响运行结果。
Chrome-headless 模式, Google 针对 Chrome 浏览器 59版 新增加的一种模式,可以让你不打开UI界面的情况下 使用 Chrome 浏览器,所以运行效果与 Chrome 保持完美一致。
(1).系统要求:
Chrome
Unix\Linux 系统需要 chrome >= 59
Windows 系统需要 chrome >= 60
Python3.6
Selenium==3.4.*
ChromeDriver==2.31
(2).配置:
from selenium.webdriver.chrome.options import Optionsfrom selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument('‐‐headless') chrome_options.add_argument('‐‐disable‐gpu') path = r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe' chrome_options.binary_location = path browser = webdriver.Chrome(chrome_options=chrome_options) browser.get('http://www.baidu.com/')
# 无界面的浏览器调用方法 from selenium import webdriver from selenium.webdriver.chrome.options import Options # 封装的handless def share_browser(): chrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') chrome_options.add_argument('--window-size=1920,1080') # 设置窗口的大小 driver = webdriver.Chrome(options=chrome_options) # path 是Chrome浏览器的文件路径 path = r'C:\Program Files\Google\Chrome\Application\chrome.exe' chrome_options.binary_location = path browser = webdriver.Chrome(chrome_options=chrome_options) return browser browser = share_browser() url = 'https://www.baidu.com' browser.get(url) browser.save_screenshot('百度.png')
注:未解决的问题:无界面浏览器还是出现了界面(现已解决,原因是selenium版本太低,需更新到3.10)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。