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实现查询苹果手机维修进度
Mar 16 Python
Python中的默认参数详解
Jun 24 Python
python中列表和元组的区别
Dec 18 Python
朴素贝叶斯Python实例及解析
Nov 19 Python
对python的bytes类型数据split分割切片方法
Dec 04 Python
在windows下使用python进行串口通讯的方法
Jul 02 Python
Python一键安装全部依赖包的方法
Aug 12 Python
python找出列表中大于某个阈值的数据段示例
Nov 24 Python
sklearn-SVC实现与类参数详解
Dec 10 Python
vscode写python时的代码错误提醒和自动格式化的方法
May 07 Python
新手常见Python错误及异常解决处理方案
Jun 18 Python
Python如何用re模块实现简易tokenizer
May 02 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开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
写给小白的JavaScript引擎指南
2015/12/04 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
jQuery基于BootStrap样式实现无限极地区联动
2016/08/26 Javascript
javascript汉字拼音互转的简单实例
2016/10/09 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
Ajax验证用户名或昵称是否已被注册
2017/04/05 Javascript
基于AngularJS实现表单验证功能
2017/07/28 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
2018/05/05 Javascript
webstorm中vue语法的支持详解
2018/05/09 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
Python splitlines使用技巧
2008/09/06 Python
python实现代理服务功能实例
2013/11/15 Python
Python3.6连接Oracle数据库的方法详解
2018/05/18 Python
Python简单实现网页内容抓取功能示例
2018/06/07 Python
用python代码将tiff图片存储到jpg的方法
2018/12/04 Python
PyTorch-GPU加速实例
2020/06/23 Python
详解Anaconda 的安装教程
2020/09/23 Python
python全栈开发语法总结
2020/11/22 Python
努比亚手机官网:nubia
2016/10/06 全球购物
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
高中生期末评语大全
2014/01/28 职场文书
医药营销个人求职信
2014/04/12 职场文书
学术诚信承诺书
2014/05/26 职场文书
安全横幅标语
2014/06/09 职场文书
大学生考试作弊检讨书
2014/09/21 职场文书
2014年乡镇妇联工作总结
2014/12/02 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
房产遗嘱范本
2015/08/06 职场文书
2016十一国庆节慰问信
2015/12/01 职场文书
Spring中的@Transactional的工作原理
2022/06/05 Java/Android
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技