爬虫入门五(Phantomjs和selenium)

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值