1.Phantomjs
1.简介:
PhantomJS是一个无界面的,可脚本编程的WebKit浏览器引擎。它原生支持多种web 标准:DOM 操作,CSS选择器,JSON,Canvas 以及SVG。
2.必须掌握的操作:
官方文档:http://phantomjs.org/quick-start.html
console.log('输出');#显示
phantom.quit();#停止
#页面加载并下载这个图片
var page = require('webpage').create();
page.open('http://cuiqingcai.com', function (status) {
console.log("Status: " + status);
if (status === "success") {
page.render('example.png');
}
phantom.exit();
});#函数功能自己推测一下喽
#evaluate 利用 evaluate 方法我们可以获取网页的源代码。这个执行是“沙盒式”的,它不会去执行网页外的 JavaScript 代码。evalute 方法可以返回一个对象,然而返回值仅限于对象,不能包含函数(或闭包)(感觉很重要)
#打开百度网页的console,可以看到一堆信息,evaluate却只返回一个对象。任何来自于网页并且包括来自 evaluate() 内部代码的控制台信息,默认不会显示。可以重写函数。
var url = 'http://www.baidu.com';
var page = require('webpage').create();
page.open(url, function(status) {
var title = page.evaluate(function() {
return document.title;
});
console.log('Page title is ' + title);
phantom.exit();
});
#重写的函数
page.onConsoleMessage = function (msg) {
console.log(msg);
};
#捕获当前页面,还可以设置大小
page.render('github.png');
2.selenium
1.简介:
一种测试工具来验证浏览器页面的行为
2.功能:
#支持多种获取对象方式,填充文本框。<input type="text" name="passwd" id="passwd-id" />
element = driver.find_element_by_id("passwd-id")
element = driver.find_element_by_name("passwd")
element = driver.find_elements_by_tag_name("input")
element = driver.find_element_by_xpath("//input[@id='passwd-id']")
#传送内容以及操作
element.send_keys('text',keys.ARROW_DOWN)
#每次传送的内容不会消失
element.clear()
#填充下拉框
from selenium.webdriver.support.ui import Select
select=Select(driver.find_element_by_name('name'))
select.select_by_index()
select.select_by_value()
select.select_by_visible_text()
#获得已选选项
all_selected_options = select.all_selected_options
select.options()
#提交某个元素
element.submit()
driver.find_element_by_id('submit').click()
现在的网页越来越多采用了 Ajax 技术,这样程序便不能确定何时某个元素完全加载出来了。这会让元素定位困难而且会提高产生 ElementNotVisibleException 的概率。
所以 Selenium 提供了两种等待方式,一种是隐式等待,一种是显式等待。
显式等待
显式等待指定某个条件,然后设置最长等待时间。如果在这个时间还没有找到元素,那么便会抛出异常了
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()
driver.get("http://somedomain/url_that_delays_loading")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
#这个地方有多种API选择
)
finally:
driver.quit()
3.pyquery
1.简介:
python里模仿jquery的操作,语法一致。jQuery?一套js的库,操作更加简单了。
2.小操作:
#初始化,4种,传代码,传地址,传文件,lxml.etree。
doc=pq('')
#属性操作:
li=doc('li')#获得所有<li 内容
type(li)#输出pquery,可以继续筛选,而不是之前的正则返回的列表。
doc.attr('id')#获得id的值
doc.attr('id','anothername')#id 换成另一个名字
li.removeclass('')
li.addclass('')
#dom操作
li.append('content')
li.preappend()#加在内容前,上面内容后。
4.总结:
略微了解了js,jquery。小功能的大致理解。。用的时候再看文档。
17/9/12