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 字典(dict)按键和值排序
Jun 28 Python
windows系统下Python环境的搭建(Aptana Studio)
Mar 06 Python
更换Django默认的模板引擎为jinja2的实现方法
May 28 Python
python 利用for循环 保存多个图像或者文件的实例
Nov 09 Python
python 二维数组90度旋转的方法
Jan 28 Python
python Web flask 视图内容和模板实现代码
Aug 23 Python
Python笔记之工厂模式
Nov 20 Python
python 实现批量替换文本中的某部分内容
Dec 13 Python
Python yield的用法实例分析
Mar 06 Python
Python导入模块包原理及相关注意事项
Mar 25 Python
python 实现 hive中类似 lateral view explode的功能示例
May 18 Python
pytorch Dropout过拟合的操作
May 27 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中session使用示例
2014/03/29 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
php DES加密算法实例分析
2019/09/18 PHP
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
按下回车键指向下一个位置的一个函数代码
2014/03/10 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
Javascript打印局部页面实例
2016/06/21 Javascript
bootstrap table配置参数例子
2017/01/05 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
javascript计算渐变颜色的实例
2017/09/22 Javascript
React教程之封装一个Portal可复用组件的方法
2018/01/02 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
JS实现横向跑马灯效果代码
2020/04/20 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
[06:38]DOTA2怒掀电竞风暴 2013Chinajoy
2013/07/27 DOTA
Python中实现字符串类型与字典类型相互转换的方法
2014/08/18 Python
Python深入学习之装饰器
2014/08/31 Python
教你用Python写安卓游戏外挂
2018/01/11 Python
Python二进制串转换为通用字符串的方法
2018/07/23 Python
浅谈Python中的bs4基础
2018/10/21 Python
使用Python实现微信提醒备忘录功能
2018/12/04 Python
使用python模拟高斯分布例子
2019/12/09 Python
python中的split()函数和os.path.split()函数使用详解
2019/12/21 Python
pytorch自定义二值化网络层方式
2020/01/07 Python
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
介绍java中初始化块的使用
2012/09/11 面试题
关于爱情的广播稿
2014/01/16 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
医生党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
群众路线剖析材料怎么写
2014/10/09 职场文书
文明单位汇报材料
2014/12/24 职场文书
自我推荐信格式模板
2015/03/24 职场文书
运动会主持词大全
2015/07/02 职场文书
Mysql Online DDL的使用详解
2021/05/20 MySQL
使用Cargo工具高效创建Rust项目
2022/08/14 Javascript