selenium
Selenium自动化浏览器。如何使用完全取决于你。主要是用于自动化Web应用程序进行测试,但肯定不仅限于此。无聊的基于Web的管理任务也可以(也应该!)也是自动化的。Selenium已经得到了一些最大的浏览器供应商的支持,这些供应商已经(或正在采取)使Selenium成为其浏览器的本地部分。它也是无数其他浏览器自动化工具,API和框架的核心技术。
beautifulSoup
是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.
phantomjs
一个服务器端的 JavaScript API 的 WebKit。其支持各种Web标准: DOM 处理, CSS 选择器, JSON, Canvas,
无需浏览器的支持即可实现对Web的支持,且原生支持各种Web标准,如DOM 处理、JavaScript、CSS选择器、JSON、Canvas和可缩放矢量图形SVG。PhantomJS主要是通过JavaScript和
CoffeeScript
控制WebKit的CSS选择器、可缩放矢量图形SVG和HTTP网络等各个模块
python windows环境准备
1. python3.6.x
https://www.python.org/downloads/
2. windows 依赖环境
Visual C++ Redistributable
https://www.microsoft.com/zh-CN/download/details.aspx?id=48145
3. python 包管理工具 pip
python3.4+已自带包管理器工具pip3
python 安装完成后,需要更新激活,即可在命令行使用 如下: 详情请见
https://docs.python.org/3/library/ensurepip.html
安装python必备环境之后,便可开始python编程
python IDE工具推荐
1.sublime text (强大的文本编辑器,支持插件安装,可直接执行py文件)
2.jupyter (web版编辑器)
selenium Windows环境
上一步已经安装PIP包管理器,接下来安装第三方工具及库,使用PIP安装
如做WEB应用程序自动化测试,需要下载webdriver
http://www.seleniumhq.org/download/
下载对应的浏览器驱动,开始编码
#selenium 自动化测试---chrome模拟登录
import time
from selenium.webdriver.common.keys import Keys
#chromedriver绝对路径,启动chrome浏览器
browser = webdriver.Chrome("D:\Program_dev\chromedriver.exe")
#打开连接
browser.get('http://www.xyb2b.com/user/login')
//查找元素
funame = browser.find_element_by_name("funame")
funame.send_keys("bondbond")
time.sleep(1)
fpasswd = browser.find_element_by_name("fpasswd")
fpasswd.send_keys("123456")
time.sleep(1)
fpasswd.send_keys(Keys.RETURN)
time.sleep(2)
selenium + webdriver 模拟浏览行为,通过获取页面元素实现自动化
phantomjs
官网
http://phantomjs.org/
PhantomJS 的使用场景如下:
- 无需浏览器的Web测试:无需浏览器的情况下进行快速的Web测试,且支持很多测试框架,如YUI Test、Jasmine、WebDriver、Capybara、QUnit、Mocha等。
- 页面自动化操作:使用标准的DOM API或一些JavaScript框架(如jQuery)访问和操作Web页面。
- 屏幕捕获:以编程方式抓起CSS、SVG和Canvas等页面内容,即可实现网络爬虫应用。构建服务端Web图形应用,如截图服务、矢量光栅图应用。
- 网络监控:自动进行网络性能监控、跟踪页面加载情况以及将相关监控的信息以标准的HAR格式导出。
#phantomjs 截屏
from selenium import webdriver
import time
#
此处有坑注意executable_path的值前需加
"
r
"
driver = webdriver.PhantomJS(executable_path=r"D:\Program_dev\phantomjs-2.1.1-windows\bin\phantomjs.exe")
driver.get("http://www.xyb2b.com")
data = driver.title
print(data)
time.sleep(5)
driver.save_screenshot('d:/xyb2b2.png')
爬虫实例
#分页爬取海掏SKU信息--并写入文件
from selenium import webdriver
from bs4 import BeautifulSoup
#写入文件
def write_file(skuId, skuName, skuPrice):
f = open("d:/sku-test.csv", 'a',encoding='utf-8')
f.write(skuId + ','+ skuName + ',' + skuPrice + '\n')
f.close()
# BeautifulSoup解析每个SKU信息
def getSku(page_source):
print("解析出SKU信息...")
soup = BeautifulSoup(page_source, "html.parser")
skuList = soup.select(".homewrap1")
for sku in skuList:
skuItem = sku.select("a")[0]["data-sku"], sku.select(".wrap_2")[0].text.strip(), sku.select(".wrap_33")[0]("span")[0].text.strip()
write_file(sku.select("a")[0]["data-sku"], sku.select(".wrap_2")[0].text.strip(), sku.select(".wrap_33")[0]("span")[0].text.strip())
#抓取页面的SKU信息,此页面是AJAX分页
def getAll():
#如
无需浏览器的情况下进行快速的Web抓取,可用PhantomJS
driver = webdriver.Chrome("D:\Program_dev\chromedriver.exe")
driver.get("https://www.haitun.hk/Index/product/category_id/2.html")
#抓取列表总共条数
pageNum = driver.find_element_by_class_name("pagination_2")
pageNumSpan = pageNum.find_elements_by_tag_name("span")
print("总共",pageNumSpan[0].text,"页")
#循环每页列表数据并解析写入文件
for i in range(0,int(pageNumSpan[0].text)):
print("正在爬取第",i+1,"页")
skuItem = getSku(driver.page_source)
print("第",i+1,"页爬取完成\n")
nextPage = driver.find_element_by_id("page-next")
#加载下页
nextPage.click()
getAll()