python selenium 抓包代码封装

# 导入selenium模块中的web引擎
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from pyquery import PyQuery as pq
# 时间 下载工具包
import time, wget, os


class Network(object):
    def __init__(self, url, seconds=10):
        # 这个是一个用来控制chrome以无界面模式打开的浏览器
        # 创建一个参数对象,用来控制chrome以无界面的方式打开
        options = Options()
        options.add_experimental_option('excludeSwitches', ['enable-automation'])
        options.add_argument('--headless')  # 设置Chrome为无头模式
        options.add_argument('--no-sandbox')
        options.add_argument('--disable-dev-shm-usage')
        options.add_argument('blink-settings=imagesEnabled=false')
        options.add_argument('--disable-gpu')
        # 建立浏览器对象 ,通过Phantomjs
        self.browser = webdriver.Chrome(options=options)
        self.url = url
        # 发起请求
        self.browser.get(url)
        time.sleep(3)  # 等待3s
        # 等待一定时间,让js脚本加载完毕
        self.browser.implicitly_wait(seconds)  # seconds 隐式等待

        # 静态文件,图片地址
        cur_dir = os.path.split(os.path.realpath(__file__))[0]
        self.static_src = os.path.abspath(cur_dir + '/./../static/')

        # 常用变量 页面源码,挂载在jq上
        self.JQuery = pq(self.browser.page_source)

    # 浏览器器对象
    def bom(self):
        return self.browser

    # 关闭浏览器
    def close_browser(self):
        self.browser.quit()

    # 模拟浏览器抓取数据主业务 重构 返回浏览器对象
    def main(self, url='', seconds=20):
        # 访问url
        if url == '':
            url = self.url

        self.browser.get(url)
        time.sleep(3)  # 等待3s
        # 等待一定时间,让js脚本加载完毕
        self.browser.implicitly_wait(seconds)  # seconds 隐式等待
        #页面源码 页面源码,挂载在jq上
        self.JQuery = pq(self.browser.page_source)
        return self.browser

    # 如果列表的长度为1强制转换为字典
    def list_or_dict(self, arr):
        if len(arr) == 1:
            return arr[0]
        else:
            return arr

    # 通过tagName获取对象
    def tag_name(self, tag_name):
        return self.list_or_dict(self.browser.find_elements_by_tag_name(tag_name))

    # 通过id获取对象
    def id(self, id):
        return self.browser.find_element_by_id(id)

    # 通过className 获取对象
    def class_name(self, class_name):
        return self.list_or_dict(self.browser.find_elements_by_class_name(class_name))

    # 通过a标签href属性获取对象 用链接文本定位超链接
    def href_name(self, href_name):
        return self.list_or_dict(self.browser.find_elements_by_partial_link_text(href_name))

    # css选择器定位
    def css_selector(self, css_selector):
        return self.list_or_dict(self.browser.find_elements_by_css_selector(css_selector))

    # find 定位选择
    def find(self, element, name):
        if element.find_elements_by_css_selector(name):
            return element.find_elements_by_css_selector(name)

    # 获取元素的属性
    def attr(self, element, attr_name):
        if isinstance(element, list):
            arr = []
            for e in element:
                arr.append(e.get_attribute(attr_name))
            return arr
        else:
            return element.get_attribute(attr_name)

    # 获取元素的文本
    def text(self, element):
        if isinstance(element, list):
            arr = []
            for e in element:
                arr.append(e.text)
            return arr
        else:
            return element.text

    # 获取页面body数据
    def get_body(self):
        # 返回body对象
        return self.tag_name('body')[0]

    # 下载文件,图片等
    def download(self, urls, dir=''):
        # 判断url的数据属性
        if isinstance(urls, list):
            for url in urls:
                # 下载文件参数 文件url 保存的地址
                f_name = url.split('/')[-1]
                if dir != '':
                    wget.download(url, os.path.abspath(dir + '/' + f_name))
                else:
                    wget.download(url, os.path.abspath(self.static_src + '/' + f_name))
        else:
            # 下载文件参数 文件url 保存的地址
            f_name = urls.split('/')[-1]
            if dir != '':
                wget.download(urls, os.path.abspath(dir + '/' + f_name))
            else:
                wget.download(urls, os.path.abspath(self.static_src + '/' + f_name))
        return True

# 调用

 

# 设置访问的url
url = "https://www.runoob.com/python3/python3-namespace-scope.html"
# 初始化实例
net = Network(url)

ths=net.JQuery.find('.table_wrapper-table thead th').items()
trs=net.JQuery.find('.table_wrapper-table tbody tr')
trs_len=trs.length
# 临时变量 存储 key名称

你可能感兴趣的:(python)