爬虫入门五(Phantomjs和selenium)

来源:互联网 发布:java 数据库 proxy 编辑:程序博客网 时间:2024/05/18 00:12

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  Selectselect=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_optionsselect.options()#提交某个元素element.submit()driver.find_element_by_id('submit').click()

现在的网页越来越多采用了 Ajax 技术,这样程序便不能确定何时某个元素完全加载出来了。这会让元素定位困难而且会提高产生 ElementNotVisibleException 的概率。
所以 Selenium 提供了两种等待方式,一种是隐式等待,一种是显式等待。

显式等待显式等待指定某个条件,然后设置最长等待时间。如果在这个时间还没有找到元素,那么便会抛出异常了from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECdriver = 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
原创粉丝点击