selenium切换标签页解决get超时问题的完整代码


Posted in Python onAugust 30, 2020

selenium切换标签页解决get超时问题的完整代码

从 gif 直观地感受一下效果

我有大量 url 需要访问,但是有些 url 会超时

为了避免超时,设置driver.set_page_load_timeout(3)限时3秒,一旦超时就会产生 TimeoutException

而且超时后标签页就卡柱了,只能通过 driver.close()关闭

如果你只有一个标签页,关闭就直接退出了,还得重启

自然想到先保留一个备用的标签,原标签超时需要关闭的时候就切换过来,然后再关闭,并打开新标签,保证任何时候都有两个标签页可用!!

def visit(urls, timeout=3):
 driver.implicitly_wait(timeout) # 操作、获取元素时的隐式等待时间
 driver.set_page_load_timeout(timeout) # 页面加载超时等待时间
 
 main_win = driver.current_window_handle
 
 for url in urls:
  all_win = driver.window_handles
  try:
   if len(all_win) == 1:
    driver.execute_script('window.open();')
   driver.get(url)
   # 页面处理
   pass
   
  except Exception:
   for win in all_win:
    if main_win != win:
     driver.close() # 关闭卡住的标签
     driver.switch_to.window(win) # 切换到备用标签
     main_win = win # 切换到备用标签
     break

完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.chrome.options import Options
import time
import requests
import zipfile
import os

def un_zip(file_name, to_dir='./'):
 """unzip zip file"""
 zip_file = zipfile.ZipFile(file_name)
 if os.path.isdir(to_dir):
  pass
 else:
  os.mkdir(to_dir)
 for names in zip_file.namelist():
  zip_file.extract(names, to_dir)
 zip_file.close()

 
def download_driver(to_dir='./', version=''):
 print('install chrome-driver first')
 url = 'http://npm.taobao.org/mirrors/chromedriver/LATEST_RELEASE'
 if len(version)>0:
  url = 'http://npm.taobao.org/mirrors/chromedriver/LATEST_RELEASE_'+version
  
 version = requests.get(url).content.decode('utf8')
 driver_file = 'http://npm.taobao.org/mirrors/chromedriver/' + version + '/chromedriver_win32.zip'
 r = requests.get(driver_file)
 download_zip = "chromedriver_win32.zip"
 with open(download_zip, "wb") as code:
  code.write(r.content)
 un_zip(download_zip, to_dir)
 os.remove(download_zip)


try:
 driver = webdriver.Chrome()
except Exception as e:
 download_driver(to_dir='./', version='76')
 driver = webdriver.Chrome()

with open("url.txt", 'r') as file:
 urls = [ line.strip('\n') for line in file.readlines()]

visit(urls)

for i in driver.window_handles:
 driver.switch_to.window(i)
 driver.close()

总结

到此这篇关于selenium切换标签页解决get超时问题的文章就介绍到这了,更多相关selenium切换标签页解决get超时内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
详解Python的Django框架中的templates设置
May 11 Python
分享一下Python 开发者节省时间的10个方法
Oct 02 Python
深入解析Python中函数的参数与作用域
Mar 20 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
Apr 10 Python
python3.x实现发送邮件功能
May 22 Python
Python之dict(或对象)与json之间的互相转化实例
Jun 05 Python
django解决跨域请求的问题
Nov 11 Python
python-opencv颜色提取分割方法
Dec 08 Python
解决TensorFlow GPU版出现OOM错误的问题
Feb 03 Python
Python django框架 web端视频加密的实例详解
Nov 20 Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 Python
详解OpenCV曝光融合
Apr 29 Python
五分钟带你搞懂python 迭代器与生成器
Aug 30 #Python
python开根号实例讲解
Aug 30 #Python
python一些性能分析的技巧
Aug 30 #Python
python脚本第一行如何写
Aug 30 #Python
golang/python实现归并排序实例代码
Aug 30 #Python
python创建文本文件的简单方法
Aug 30 #Python
python 中的9个实用技巧,助你提高开发效率
Aug 30 #Python
You might like
十天学会php之第十天
2006/10/09 PHP
PHP中将ip地址转成十进制数的两种实用方法
2013/08/15 PHP
使用PHP curl模拟浏览器抓取网站信息
2013/10/28 PHP
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
js资料toString 方法
2007/03/13 Javascript
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
给html超链接设置事件不使用href来完成跳
2014/04/20 Javascript
javascript单引号和双引号的区别和处理
2014/05/14 Javascript
jQuery中ready事件用法实例
2015/01/19 Javascript
Nodejs全局安装和本地安装的不同之处
2016/07/04 NodeJs
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
Vue.js实现数据响应的方法
2018/08/13 Javascript
微信小程序textarea层级过高的解决方法
2019/03/04 Javascript
通过js示例讲解时间复杂度与空间复杂度
2019/08/06 Javascript
vue控制多行文字展开收起的实现示例
2019/10/11 Javascript
Vue中常用rules校验规则(实例代码)
2019/11/14 Javascript
JS常见内存泄漏及解决方案解析
2020/05/30 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
2020/08/10 Javascript
Python中的exec、eval使用实例
2014/09/23 Python
Python字符串处理函数简明总结
2015/04/13 Python
Python中isnumeric()方法的使用简介
2015/05/19 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
2018/08/03 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
python的pip有什么用
2020/06/17 Python
使用CSS3在触屏上为按钮实现激活效果
2013/09/27 HTML / CSS
css3教程之倾斜页面
2014/01/27 HTML / CSS
Html5中的桌面通知Notification的实现
2018/09/25 HTML / CSS
学雷锋演讲稿汇总
2014/05/10 职场文书
开服装店计划书
2014/08/15 职场文书
幼儿园感恩节活动总结
2015/03/24 职场文书
创业计划书之旅游网站
2019/09/06 职场文书
golang 比较浮点数的大小方式
2021/05/02 Golang
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android