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脚本来控制Windows Azure的简单教程
Apr 16 Python
python实现的简单抽奖系统实例
May 22 Python
Python实现返回数组中第i小元素的方法示例
Dec 04 Python
python hook监听事件详解
Oct 25 Python
django的csrf实现过程详解
Jul 26 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
Jan 09 Python
Python sys模块常用方法解析
Feb 20 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
Django:使用filter的pk进行多值查询操作
Jul 15 Python
python中的yield from语法快速学习
Nov 06 Python
如何将Pycharm中调整字体大小的方式设置为"ctrl+鼠标滚轮上下滑"
Nov 17 Python
python3列表删除大量重复元素remove()方法的问题详解
Jan 04 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
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
锋利的jQuery jQuery中的DOM操作
2010/03/21 Javascript
JQuery 选择和过滤方法代码总结
2010/11/19 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
HTML Color Picker(js拾色器效果)
2013/08/27 Javascript
js 自动播放的实例代码
2013/11/19 Javascript
Bootstrap精简教程
2015/11/27 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
Js实现中国公民身份证号码有效性验证实例代码
2017/05/03 Javascript
微信小程序 http请求的session管理
2017/06/07 Javascript
jquery拖动改变div大小
2017/07/04 jQuery
JavaScript登录验证基础教程
2017/11/01 Javascript
Python中的类学习笔记
2014/09/23 Python
python计算牛顿迭代多项式实例分析
2015/05/07 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
2019/05/13 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
python基于opencv检测程序运行效率
2019/12/28 Python
tensorflow求导和梯度计算实例
2020/01/23 Python
Python转换itertools.chain对象为数组的方法
2020/02/07 Python
用python实现前向分词最大匹配算法的示例代码
2020/08/06 Python
Selenium 配置启动项参数的方法
2020/12/04 Python
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
巴西购物网站:Submarino
2020/01/19 全球购物
大学四年学习的自我评价分享
2013/12/09 职场文书
个人评语大全
2014/05/04 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
合伙开公司协议书范本
2014/10/28 职场文书
教代会闭幕词
2015/01/28 职场文书
个人培训总结
2015/03/05 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
小学生暑假安全公约
2015/07/14 职场文书
2015年汽车销售员工作总结
2015/07/24 职场文书
服务器间如何实现文件共享
2022/05/20 Servers