当前位置: 首页 > news >正文

嘉兴商城网站开发设计档案网站 内容建设

嘉兴商城网站开发设计,档案网站 内容建设,wordpress标签tag链接静态化,苏州网站开发公司哪里济南兴田德润简介前言 使用Selenium 创建多个浏览器#xff0c;这在自动化操作中非常常见。 而在Python中#xff0c;使用 Selenium threading 或 Selenium ThreadPoolExecutor 都是很好的实现方法。 应用场景#xff1a; 创建多个浏览器用于测试或者数据采集#xff1b;使用Selenium 控… 前言 使用Selenium 创建多个浏览器这在自动化操作中非常常见。 而在Python中使用 Selenium threading 或 Selenium ThreadPoolExecutor 都是很好的实现方法。 应用场景 创建多个浏览器用于测试或者数据采集使用Selenium 控制本地安装的 chrome浏览器 去做一些操作… 文章提供了 Selenium threading 和 Selenium ThreadPoolExecutor 结合的代码模板拿来即用。 知识点 上面两个都是 Python 内置模块无需手动安装~ 导入模块 import threading from concurrent.futures import ThreadPoolExecutor, as_completed 多线程还是线程池 在Selenium中使用 多线程 或者是 线程池差别并不大。主要都是网络I/O的操作。 在使用 ThreadPoolExecutor 的情况下任务将被分配到不同的线程中执行从而提高并发处理能力。与使用 threading 模块相比使用 ThreadPoolExecutor 有以下优势: 更高的并发处理能力线程池 可以动态地调整线程数量以适应任务的数量和处理要求从而提高并发处理能力。更好的性能线程池 可以根据任务的类型和大小动态地调整线程数量从而提高性能和效率。… 总之使用 线程池 可以提高并发处理能力更易于管理并且可以提供更好的性能和效率。 但是选择多线程效果也不差。 所以使用哪个都不必纠结哪个代码量更少就选哪个自然是最好的。 多个浏览器✨ Selenium自动化中需要多个浏览器属于是非常常见的操作了。 不管是用于自动化测试、还是爬虫数据采集这都是个可行的方法。 这里示例的代码中线程池的运行时候只有 多线程 的一半 多线程与 多 浏览器 这份代码的应用场景会广一些后续复用修改一下 browser_thread 函数的逻辑就可以了。 这里模拟相对复杂的操作在创建的浏览器中新打开一个标签页用于访问指定的网站。 然后切换到新打开的标签页进行截图。 代码释义 定义一个名为 start_browser 的函数用于创建 webdriver.Chrome 对象。定义一个名为 browser_thread 的函数接受一个 webdriver.Chrome 对象和一个整数作为参数用于打开指定网页并截图。 切换到最后一个窗口然后截图。main函数创建了5个浏览器5个线程执行上面的操作然后等待所有线程执行完毕。 # -*- coding: utf-8 -*- # Name: multi_thread.py # Author: 小月 # Date: 2023/10/26 20:00 # Description: import threading from selenium import webdriver from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager def start_browser(): service ChromeService(ChromeDriverManager().install()) driver webdriver.Chrome(serviceservice) return driver def browser_thread(driver: webdriver.Chrome, idx: int): url_list [https://www.csdn.net/, https://www.baidu.com, https://music.163.com/, https://y.qq.com/, https://cn.vuejs.org/] try: driver.execute_script(fwindow.open({url_list[idx]})) driver.switch_to.window(driver.window_handles[-1]) driver.save_screenshot(f{idx}.png) return True except Exception: return False def main(): for idx in range(5): driver start_browser() threading.Thread(targetbrowser_thread, args(driver, idx)).start() # 等待所有线程执行完毕 for thread in threading.enumerate(): if thread is not threading.current_thread(): thread.join() if __name__ __main__: main() 运行结果 运行时长在9.28秒速度与网络环境有很大关系木桶效应取决于最后运行完成的浏览器看到程序运行完成后多出了5张截图。 线程池与 多 浏览器 这份代码与 多线程与 多浏览器 的操作基本一致。速度上却比多线程节省了一半。 # -*- coding: utf-8 -*- # Name: demo2.py # Author: 小月 # Date: 2023/10/26 20:00 # Description: from selenium import webdriver from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager from concurrent.futures import ThreadPoolExecutor, as_completed MAX_WORKERS 5 service ChromeService(ChromeDriverManager().install()) def start_browser(): driver webdriver.Chrome(serviceservice) return driver def browser_task(driver: webdriver.Chrome, idx: int): url_list [https://www.csdn.net/, https://www.baidu.com, https://music.163.com/, https://y.qq.com/, https://cn.vuejs.org/] try: driver.execute_script(fwindow.open({url_list[idx]})) driver.switch_to.window(driver.window_handles[-1]) driver.save_screenshot(f{idx}.png) return True except Exception: return False def main(): executor ThreadPoolExecutor(max_workersMAX_WORKERS) ths list() for idx in range(5): driver start_browser() th executor.submit(browser_task, driver, idxidx) ths.append(th) # 获取结果 for future in as_completed(ths): print(future.result()) if __name__ __main__: main() 运行结果 运行时长在4.5秒运行效果图不是很匹配但确实是比多线程快很多。看到程序运行完成后多出了5张截图。 多个标签页 这个的应用场景有点意思。 这里的操作与上面的 多个浏览器其实是差不多的。 区别在于上面打开多个浏览器这里打开多个标签页。 所以这个需要考量一个问题资源争夺。与是这里用上了 threading.Lock 锁用以保护资源线程安全。 多线程与 多 标签页 代码释义 与上面差不多不解释了。 # -*- coding: utf-8 -*- # Name: demo2.py # Author: 小月 # Date: 2023/10/26 20:00 # Description: import threading from selenium import webdriver from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager service ChromeService(ChromeDriverManager().install()) lock threading.Lock() def start_browser(): driver webdriver.Chrome(serviceservice) return driver def browser_thread(driver: webdriver.Chrome, idx: int): url_list [https://www.csdn.net/, https://www.baidu.com, https://music.163.com/, https://y.qq.com/, https://cn.vuejs.org/] try: lock.acquire() driver.execute_script(fwindow.open({url_list[idx]})) driver.switch_to.window(driver.window_handles[idx 1]) driver.save_screenshot(f{idx}.png) return True except Exception: return False finally: lock.release() def main(): driver start_browser() for idx in range(5): threading.Thread(targetbrowser_thread, args(driver, idx)).start() # 等待所有线程执行完毕 for thread in threading.enumerate(): if thread is not threading.current_thread(): thread.join() if __name__ __main__: main() 运行结果 线程池与 多 标签页 这里不展示运行结果了因为效果与 多线程与 多 标签页 一致。 # -*- coding: utf-8 -*- # Name: thread_pool.py # Author: 小月 # Date: 2023/10/26 20:00 # Description: import time import threading from selenium import webdriver from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager from concurrent.futures import ThreadPoolExecutor, as_completed MAX_WORKERS 5 service ChromeService(ChromeDriverManager().install()) lock threading.Lock() def start_browser(): driver webdriver.Chrome(serviceservice) return driver def browser_task(driver: webdriver.Chrome, idx: int): url_list [https://www.csdn.net/, https://www.baidu.com, https://music.163.com/, https://y.qq.com/, https://cn.vuejs.org/] try: lock.acquire() driver.execute_script(fwindow.open({url_list[idx]})) driver.switch_to.window(driver.window_handles[idx 1]) driver.save_screenshot(f{idx}.png) return True except Exception: return False finally: lock.release() def main(): driver start_browser() executor ThreadPoolExecutor(max_workersMAX_WORKERS) ths list() for idx in range(5): th executor.submit(browser_task, driver, idxidx) ths.append(th) # 获取结果 for future in as_completed(ths): print(future.result()) if __name__ __main__: st time.time() main() et time.time() print(et - st) 总结⚡⚡ 本文章介绍了 Selenium threading 和 Selenium ThreadPoolExecutor 来创建多个浏览器或多个标签页的操作。 文中示例的代码比较简单所以 线程池 比 多线程 运行的更加快。 但在实际的使用过程中可以根据自己的喜好去选择 线程池 还是 多线程 。 后话 本次分享到此结束 see you~‍‍
http://www.pierceye.com/news/465213/

相关文章:

  • 福州网站设计十年乐云seo推广网上国网有什么好处
  • 豪华网站建设wordpress推广提成
  • 网站优化外包价格搜索引擎费用
  • 网站建设基本范例sqlite开发网站
  • 网站建设顾问站建开发外包公司
  • 建立网站花钱吗wordpress表结构写入不全
  • 绿色家园网站怎么做导出wordpress文章
  • 合肥有什么好的网站建设公司网站建设的售后服务流程
  • 做网站烧钱吗济南免费建站
  • ps个人主页网页设计模板汕头关键词优化服务
  • 网站建设功能图网站开发新技术探索
  • 做自行车网站应该注意什么个人介绍网页设计模板
  • 邢台网站建设免费做网站排名上海开发app
  • 沈阳网站建设设计企业网站设计与管理系统
  • 婚纱照网站制作梁山网站建设价格
  • 做现货去哪些网站营销好呢网站 服务报价
  • 网站建设渠道做网站前端和平面配合
  • 北京交友最好的网站建设wordpress 移动支付宝
  • 2015百度推广网站遭到攻击非遗网页设计作品欣赏
  • 网站空间需要多大网站推荐几个免费的
  • 做一个网站花多少钱建行系统
  • 滁州市住房城乡建设部网站wordpress title背景
  • 餐饮手机微网站怎么做wordpress 多语言建站
  • 企业信息系统案例东昌府聊城网站优化
  • 做美食直播哪个网站好php网站开发数据列表排重
  • 网站建设 职责网站分站加盟
  • 单页网站产品手机网站免费生成
  • 无锡电子商务网站建设公司德国网站的后缀名
  • 服务器做视频网站赣州企业做网站
  • 如何看出网站用dede做的网站百度快照