在使用selenium过程中,发现经常需要使用的两个参数user-agent请求头 和 proxy代理,设置需要一大堆代码
requests就比较简单,于是乎 Browser类 就被封装成了类似requests库的一个模块,便于平时爬虫使用
项目说明: PHANTOMJS 和 Chrome 浏览器,获取网页使用
# -*- coding: utf-8 -*-
# @File : browsers.py
# @Date : 2018-05-30
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.common.proxy import ProxyType
USER_AGENT = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"
class Browser(object):
"""PHANTOMJS 和 Chrome 浏览器,获取网页使用"""
def __init__(self, browser):
"""
:param
browser: 浏览器对象,通过静态方法from_phantomJS 或 from_chrome获取
"""
self.browser = browser
@staticmethod
def from_phantomJS(user_agent=USER_AGENT, proxy=None):
"""获取PhantomJS
:param user_agent: {str} 请求头
:param proxy: {str} 代理地址, 如:127.0.0.0:8080
:return: browser浏览器对象
"""
dcap = dict(DesiredCapabilities.PHANTOMJS)
# 设置user-agent请求头
dcap["phantomjs.page.settings.userAgent"] = user_agent
# 禁止加载图片
dcap["phantomjs.page.settings.loadImages"] = False
phantomJS = webdriver.PhantomJS(desired_capabilities=dcap)
# 设置代理
if proxy != None:
_proxy = webdriver.Proxy()
_proxy.proxy_type = ProxyType.MANUAL
_proxy.http_proxy = proxy
# 将代理设置添加到webdriver.DesiredCapabilities.PHANTOMJS中
_proxy.add_to_capabilities(webdriver.DesiredCapabilities.PHANTOMJS)
phantomJS.start_session(webdriver.DesiredCapabilities.PHANTOMJS)
return Browser(phantomJS)
@staticmethod
def from_chrome(user_agent=USER_AGENT, proxy=None):
"""获取Chrome
:param user_agent: {str} 请求头
:param proxy: {str} 代理地址, 如:127.0.0.0:8080
:return: browser浏览器对象
"""
options = webdriver.ChromeOptions()
options.add_argument('lang=zh_CN.UTF-8')
# 设置user-agent请求头
options.add_argument('user-agent=%s' % user_agent)
# 设置代理
if proxy != None:
options.add_argument('--proxy-server= %s' % proxy)
# http://www.baidu.com
# 图片不加载
prefs = {
'profile.default_content_setting_values': {
'images': 2
}
}
options.add_experimental_option('prefs', prefs)
chrome = webdriver.Chrome(chrome_options=options)
return Browser(chrome)
def get_html(self, url):
"""获取网页文件
:param url: {str} 网页链接
:return: {str} 网页文本
"""
self.browser.get(url)
return self.browser.page_source
@property
def title(self):
"""获取标题
:return {str} 网页标题
"""
return self.browser.title
def save_screenshot(self, name=None):
"""截图保存
:param name: {str} 图片名称, 如: "abc.png"
:return None
"""
if name == None:
name = "%s.png" % self.browser.title
self.browser.save_screenshot(name)
def close(self):
"""关闭浏览器
:return None
"""
self.browser.close()
self.browser.quit()
if __name__ == '__main__':
# 这是我自己写的代理ip获取方法
import proxy_helper
proxy = proxy_helper.get_ip()
url = "https://httpbin.org/get?show_env=1"
# 实例化浏览器
browser = Browser.from_phantomJS(proxy=proxy)
html = browser.get_html(url) # 获取网页
title = browser.title # 获取标题
browser.save_screenshot() # 截图
browser.close() # 关闭浏览器
# 打印输出
print(html)
print(title)