0
点赞
收藏
分享

微信扫一扫

selenium在框架中的使用(简单)


middlewars.py

from selenium import webdriver
#导入selinium库
from scrapy.http import HtmlResponse

import time

class SeliniumMilldewares(object):
    def process_request(self, request, spider):
        url = request.url
        # 判断页面是否需要渲染
        if 'monthdata' in url:     #用来判断具体的url请求使用selinium
            dr = webdriver.Chrome()
            # 有可能页面加载完了,数据还没加载完
            dr.get(url)
            time.sleep(7)
            data = dr.page_source       #用于获取渲染之后的源码
            # 关闭浏览器
            dr.close()
            # 构建响应
            res = HtmlResponse(
                url= url,
                request=request,
                body=data.encode(),
                encoding="utf-8",
            )
            return res

在setting配置一下就可以了

Selenium
Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器),可以接收指令,让浏览器自动加载页面,获取需要的数据,也可以页面截屏。

PhantomJS
PhantomJS 是一个基于Webkit的“无界面”(headless)浏览器,它会把网站加载到内存并执行页面上的 JavaScript。在内存中加载渲染界面,是看不见摸不到。
使用Phantomjs?先使用selinium配合其他浏览器把代码写好了, 在部署的时候再换成Phantomjs,然后部署到服务器上。

selenium的安装
sudo pip3 install selenium

phantomJS的安装
下载 http://phantomjs.org/
tar -xvjf phantomjs-2.1.1-linux-x86_64.tar.bz2
sudo cp -r phantomjs-2.1.1-linux-x86_64 /usr/local/share/
sudo ln -sf /usr/local/share/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/

Chrome浏览器驱动的安装
下载对应版本的浏览器驱动
解压后得到驱动的可执行文件,将其拷贝到任意环境变量目录
echo $PATH查看环境变量路径

1.浏览器驱动对象

1)库的导入
		from selenium import  webdriver
	2)创建浏览器对象
		driver = webdriver.xxx()	
		使用dir(driver)查看方法
	3)浏览器尺寸相关操作	
		maximize_window()		最大化
	4)浏览器的关闭操作
		close()			关闭当前标签/窗口
		quit()			关闭所有标签/窗口

创建一个浏览器对象 driver = webdriver.PhantomJS() 加载网页: driver.get("http://www.baidu.com/") 保存页面快照 driver.save_screenshot("baidu.png") 定位和操作: driver.find_element_by_xpath(“//*[@id="u1"]/a[1]”)

查看请求信息:

driver.page_source			获取源码
driver.get_cookies()		获取浏览器中存储的cookies
driver.current_url			查看当前url
driver.title				查看当前标签的标题

元素定位方法的分类(调用方式):
直接调用型(推荐方式) el = driver.find_element_by_xpath(‘html/body/div/a’)从定位到的元素中提取数据的方法
el.get_attribute(key) 获取key属性名对应的属性值 el.text 获取开闭标签之间的文本内容对定位到的元素的操作
el.click() 对元素执行点击操作 el.submit() 对元素执行提交操作 el.clear() 清空可输入元素中的数据 el.send_keys(data) 向可输入元素输入数据元素定位的两种方式(返回结果)

driver.find_element_by_xxx()			
		使用场景:
			一般用于精确定位一个元素
			返回结果为一个element对象

	driver.find_elements_by_xxx	()	
		使用场景:
			定位一组元素
			返回结果为element对象列表

定位元素的8种方法:s
el = driver.find_elements_by_id 使用id值定位 el = driver.find_elements_by_xpath 使用xpath定位 el = driver.find_elements_by_tag_name 使用标签名定位 el = driver.find_elements_by_link_text 使用文本定位 el = driver.find_elements_by_partial_link_text 使用部分文本定位 el = driver.find_elements_by_name 使用name属性值定位 el = driver.find_elements_by_class_name 使用class属性值定位 el = driver.find_elements_by_css_selector 使用css选择器定位注意点:

by_link_text()和by_partial_link_text()区别: 全部文本和包含某个文本
文本需要含有链接

selenium执行js
重要的js代码
* js = "window.scrollTo(x,y) " x为水平拖动距离,y为垂直拖动举例


举报

相关推荐

0 条评论