python selenium 抓包代码封装

    技术2022-07-12  79

    # 导入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名称
    Processed: 0.013, SQL: 9