Python爬虫:对selenium的webdriver进行简单封装

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

猜你喜欢

转载自blog.csdn.net/mouday/article/details/80512108