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入门篇之面向对象
Oct 20 Python
使用python进行文本预处理和提取特征的实例
Jun 05 Python
Django添加feeds功能的示例
Aug 07 Python
使用Python抓取豆瓣影评数据的方法
Oct 17 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
Dec 24 Python
python列表每个元素同增同减和列表元素去空格的实例
Jul 20 Python
Django 响应数据response的返回源码详解
Aug 06 Python
python基于json文件实现的gearman任务自动重启代码实例
Aug 13 Python
Python数据可视化:泊松分布详解
Dec 07 Python
kafka-python 获取topic lag值方式
Dec 23 Python
Python基础之变量基本用法与进阶详解
Jan 03 Python
使用Python的开发框架Brownie部署以太坊智能合约
May 28 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上的memcache和memcached两个pecl库
2010/03/29 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
js 页面输出值
2008/11/30 Javascript
js 鼠标点击事件及其它捕获
2009/06/04 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
详解webpack编译多页面vue项目的配置问题
2017/12/11 Javascript
JS module的导出和导入的实现代码
2019/02/25 Javascript
JS桶排序的简单理解与实现方法示例
2019/11/25 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
Python实现的排列组合计算操作示例
2017/10/13 Python
python单例模式获取IP代理的方法详解
2018/09/13 Python
解决Pycharm下面出现No R interpreter defined的问题
2018/10/29 Python
详解Python中的分支和循环结构
2020/02/11 Python
Python 捕获代码中所有异常的方法
2020/08/03 Python
python 制作简单的音乐播放器
2020/11/25 Python
HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例
2016/02/28 HTML / CSS
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
李维斯牛仔裤英国官方网站:Levi’s英国
2019/10/10 全球购物
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
Servlet的生命周期
2013/08/25 面试题
高级工程师岗位职责
2013/12/15 职场文书
工程招投标邀请书
2014/01/30 职场文书
营销与策划专业求职信
2014/06/20 职场文书
学校志愿者活动总结
2014/06/27 职场文书
关于学习的决心书
2015/02/05 职场文书
大学校园招聘会感想
2015/08/10 职场文书
《家世》读后感:看家训的力量
2019/12/30 职场文书
golang interface判断为空nil的实现代码
2021/04/24 Golang
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android
你需要掌握的20个Python常用技巧
2022/02/28 Python
Docker安装MySql8并远程访问的实现
2022/07/07 Servers
MySQL的意向共享锁、意向排它锁和死锁
2022/07/15 MySQL