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查找目录下指定扩展名的文件实例
Apr 01 Python
使用Python神器对付12306变态验证码
Jan 05 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
Jul 30 Python
用python脚本24小时刷浏览器的访问量方法
Dec 07 Python
Python基本语法之运算符功能与用法详解
Oct 22 Python
Python数据持久化存储实现方法分析
Dec 21 Python
使用PyTorch训练一个图像分类器实例
Jan 08 Python
Python可以实现栈的结构吗
May 27 Python
python实现简单猜单词游戏
Dec 24 Python
详解Python 3.10 中的新功能和变化
Apr 28 Python
Python列表删除重复元素与图像相似度判断及删除实例代码
May 07 Python
Python PIL按比例裁剪图片
May 11 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
文件上传程序的全部源码
2006/10/09 PHP
ThinkPHP采用模块和操作分析
2011/04/18 PHP
PHP 导出Excel示例分享
2014/08/18 PHP
深入浅析PHP无限极分类的案例教程
2016/05/09 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
详解cookie验证的php应用的一种SSO解决办法
2017/10/20 PHP
Javascript 判断函数类型完美解决方案
2009/09/02 Javascript
js调用AJAX时Get和post的乱码解决方法
2013/06/04 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
Js与下拉列表处理问题解决
2014/02/13 Javascript
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
DOM基础教程之使用DOM
2015/01/19 Javascript
JQuery鼠标移到小图显示大图效果的方法
2015/06/10 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
javascript获取select标签选中的值
2016/06/04 Javascript
JS中split()用法(将字符串按指定符号分割成数组)
2016/10/24 Javascript
微信小程序与php 实现微信支付的简单实例
2017/06/23 Javascript
详解tween.js 中文使用指南
2018/01/05 Javascript
微信小程序与webview交互实现支付功能
2019/06/07 Javascript
vue 解决addRoutes多次添加路由重复的操作
2020/08/04 Javascript
[01:19:54]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#1Alliance VS EHOME
2016/03/03 DOTA
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
2020/01/14 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
完美解决pycharm 不显示代码提示问题
2020/06/02 Python
Python while true实现爬虫定时任务
2020/06/08 Python
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
2016/03/15 HTML / CSS
日本乐天官方海外转运服务:Rakuten Global Express
2018/11/30 全球购物
求职自荐信怎么写
2014/03/06 职场文书
租房合同协议书
2014/04/09 职场文书
学雷锋宣传标语
2014/06/25 职场文书
大学生自我评价范文
2015/03/03 职场文书
保研专家推荐信范文
2015/03/25 职场文书