首页 > 其他分享 >selenium 速度慢的问题

selenium 速度慢的问题

时间:2022-11-22 09:23:01浏览次数:43  
标签:问题 drivers selenium 速度慢 add print import options

# -*- coding: utf-8 -*-
'''
createTime : 2022-08-04 10:22
@software: : spiderSystem
author :
@File : spider_0_douyin_user_list.py
Copyright: shannanai

在使用selenium的过程中,速度比较忙,主要原因有
1. 加载图片或者css文件等
2. driver.get(url) 是阻塞的,加载速度慢,修改 加载策略 可以优化速度
3. 一次只打开一个网页

如何实现并发的数据下载呢?
1. 使用多进程的方式,比如进程开20个
2. 一个进程打开一个浏览器,然后一个浏览器同时打开50个url,同时的并发数量是20*50=1000个,考虑到加载不成功等因素,速度也是非常的快
3. 该方法主要是针对一些js破解难度较大的网站,实现数据快速下载


关于拦截网络请求的问题
拦截网络请求的目的是:
1. 避免一些不必要的请求,节约时间。比如图片,css,js等
2. 拦截一些反爬虫的请求,或者修改请求的数据或者返回的数据结果,通过干扰请求数据和返回的数据,避免被反爬虫检测出来。

1. host 设置域名 拦截请求
windows系统 C:\Windows\System32\drivers\etc\hosts 文件设置域名拦截,把IP地址转移到并的地方
2. fiddler 拦截 请求或者修改数据
fiddler 使用 bpu 拦截请求


解决问题重要是思路,下面代码仅仅是思路,没有实际用处


'''

import random
import time

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from common.contest import *
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import win32api
import win32con

r2 = redis.Redis(host='127.0.0.1', port='6379', db=2)

):


options = Options()
# options.add_argument("headless") # 无头模式
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)

# 禁用GPU加速
options.add_argument("disable-gpu")

# 解决加载速度慢的问题
options.page_load_strategy = 'none'

# 禁止图片加载
# options.add_argument('blink-settings=imagesEnabled=false')

# 禁止图片加载
# No_Image_loading = {"profile.managed_default_content_settings.images": 2}
# options.add_experimental_option("prefs", No_Image_loading)

# prefs = {
# 'profile.default_content_setting_values': {
# 'images': 2,
# # 'permissions.default.stylesheet': 2,
# # 'javascript': 2
# }
# }
# options.add_experimental_option('prefs', prefs)

# 据说是执行后不会出现抖音滑块
# options.add_argument('--disable-blink-features=AutomationControlled')
drivers = webdriver.Chrome(options=options)
# 浏览器最大化
drivers.maximize_window()
# 驱动检测
drivers.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => false
})
"""
})

# for循环每次打开10个网页,根据自己的需求指定打开网页个数。可以打开 50个或者100个
for page in range(20):
data_dict = eval(r2.lpop("douyin_user_data_queue"))
# 调用打开浏览器的方法
crawl_data(data_dict, drivers)
time_sleep(0.5)

time_sleep(60)


#检测网页,加载成功的网页可以直接关闭,节省资源
for pages in range(4):

print("pages",pages)

all_handles = drivers.window_handles

print("all_handles",all_handles)

if len(all_handles) > 0:
print(len(all_handles))
open_url_list = []

for handle in all_handles[0:]: # 遍历全部页面句柄
drivers.switch_to.window(handle) # 切换到新页面
html = drivers.page_source

if 'RENDER_DATA' in str(html):
print(666666)
# 存入redis中去
else:
print(555555)
try:
if 'dy-account-close' in html:
drivers.find_element_by_class_name("dy-account-close").click()
except Exception as e:
print(e)

print(22222222222)

# 验证码中间页

if 'ECMy_Zdt' in html or 'Eie04v01' in html:
print("数据下载成功", html.count('ECMy_Zdt'))
drivers.close()
elif '验证码中间页' in html:
print("遇到狗屎的验证码了,程序正在重新打开......")
current_url = drivers.current_url
print(current_url)
# 注意事项 先打开网页,然后再去关闭有验证码的页面

control_string = "window.open('" + current_url + "')"
drivers.execute_script(control_string)
drivers.close()
print("999999999999999999")

time_sleep(30)

drivers.quit()
print("浏览器关闭,马上会重新打开浏览器下载数据")



if __name__ == "__main__":

starttime1 = time.time()
result_list = [page for page in range(10000)]

download_choice = 2
if download_choice == 1:
pool = multiprocessing.Pool(processes=50)
results = []
for item in result_list[0:]:
results.append(pool.apply_async(spider, args=(item,)))
pool.close()
pool.join()
else:
for item in result_list[0:]:
print("正在下载的位置是:", result_list.index(item))
spider(item)
print("============",time.time()-starttime1)


标签:问题,drivers,selenium,速度慢,add,print,import,options
From: https://www.cnblogs.com/xuchunlin/p/16613078.html

相关文章

  • 北理工39【中学】整数问题
    39.【中学】整数问题成绩5开启时间2022年10月17日星期一08:00折扣0.8折扣时间2022年11月13日星期日23:55允许迟交否关闭时间2022年11月20日星期......
  • 记录下批处理bat脚本获取打包发布问题
    最近做了个Jenkins配合Gitlab自动部署Java项目到WindowsServer服务器。Jenkins和Gitlab在Linux下,好一顿折腾,先记录下脚本,其余后续补充吧。把Java项目作为服务https://g......
  • 生产计划体系完整解决方案(2) : 复杂大规模问题之 - 分区规划
    本文章是生产计划体系完整解决议定的第2篇-复杂大规模问题之-分区规划。在完整的规划体系中,针对不同的场景与需求,需要对应的规划方案。在上一篇(生产计划体系......
  • mysql复习-安装和常规问题
    第02章_MySQL环境搭建讲师:尚硅谷宋红康(江湖人称:康师傅)官网:http://www.atguigu.com1.MySQL的卸载步骤1:停止MySQL服务在卸载之前,先停止MySQL8.0的服务。按键盘上的“......
  • HDLBits-Mux9to1v问题
    知识点always@(*)case(sel)2'b00:beginsout_t=p0;end2'b01:sout_t......
  • 操作系统在访问快表时的问题
    今天突然想到一个问题,就是操作系统在访问快表时,是以虚拟地址还是以物理地址访问快表的?这个问题答案应该是以虚拟地址访问的,因为如果还是以物理地址来访问快表,那么还需要进......
  • vue+axios+ssm解决跨域问题
    环境1.vue-admin-template模板2.axios3.后端java跨域问题解决方案注意:配置了前端解决方案后端可以不用配置,反之后端配置了前端可以不用配置前端解决方案前端采用......
  • 多态的概述,优势,类型转换问题
    多态的概述,多态的形式什么是多态同类型的对象,执行同一个行为,会表现出不同的行为特征多态的常见多态中成员访问特点1.方法调用:编译看左边,运行看右边2.变量调用:编译看......
  • vue+axios跨域问题
    环境1.vue-admin-template模板2.axios3.后端java跨域问题解决方案前端vue.config.js文件在module.exports中找到devServer完成如下配置devServer:{port:p......
  • 微信小程序ios保存文件预览打不开的问题
    需求:微信小程序能下载xls文件到手机容易出错的点:1、没有配置域名,因为我的文件地址是阿里云的,小程序下载的时候会报没有配置域名,(因为我本地跑的时候勾选了不效验域名,所以......