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

简介: 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)
相关文章
|
5月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
6月前
|
数据采集 Web App开发 自然语言处理
新闻热点一目了然:Python爬虫数据可视化
新闻热点一目了然:Python爬虫数据可视化
|
5月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
6月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
917 19
|
5月前
|
数据采集 存储 JSON
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
|
6月前
|
SQL 测试技术 数据库
healenium+python+selenium
上次介绍了如何利用healenium+java+selenium来实现selenium的自愈,这次介绍如何healenium+python+selenium。关于healenium+python+selenium网上资料更少,并且甚至是错误的。在著名的书籍《软件测试权威指南中》也是有一定问题的。现在介绍如下
374 4
|
5月前
|
数据采集 存储 JavaScript
解析Python爬虫中的Cookies和Session管理
Cookies与Session是Python爬虫中实现状态保持的核心。Cookies由服务器发送、客户端存储,用于标识用户;Session则通过唯一ID在服务端记录会话信息。二者协同实现登录模拟与数据持久化。
|
6月前
|
数据采集 存储 Web App开发
处理Cookie和Session:让Python爬虫保持连贯的"身份"
处理Cookie和Session:让Python爬虫保持连贯的"身份"
|
7月前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
1289 1
|
7月前
|
数据采集 存储 JSON
地区电影市场分析:用Python爬虫抓取猫眼/灯塔专业版各地区票房
地区电影市场分析:用Python爬虫抓取猫眼/灯塔专业版各地区票房

推荐镜像

更多