在使用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)