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 05 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
Feb 14 Python
Python实现数据库并行读取和写入实例
Jun 09 Python
浅谈python内置变量-reversed(seq)
Jun 21 Python
MySQL适配器PyMySQL详解
Sep 20 Python
python3实现域名查询和whois查询功能
Jun 21 Python
详解python tkinter教程-事件绑定
Mar 28 Python
使用Python制作简单的小程序IP查看器功能
Apr 16 Python
如何安装2019Pycharm最新版本(详细教程)
Sep 26 Python
使用Python-OpenCV消除图像中孤立的小区域操作
Jul 05 Python
详解python程序中的多任务
Sep 16 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
smtp邮件发送一例
2006/10/09 PHP
提高php运行速度的一些小技巧分享
2012/07/03 PHP
PHP设计模式之调解者模式的深入解析
2013/06/13 PHP
php_pdo 预处理语句详解
2016/11/21 PHP
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
jQuery 对象中的类数组操作
2009/04/27 Javascript
jquery jqPlot API 中文使用教程(非常强大的图表工具)
2011/08/15 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
DOM节点深度克隆函数cloneNode()用法实例
2015/01/12 Javascript
jquery实现删除一个元素后面的所有元素功能
2015/12/21 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
用JS生成UUID的方法实例
2016/03/30 Javascript
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
Vue 父子组件、组件间通信
2017/03/08 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
vue 注册组件的使用详解
2018/05/05 Javascript
js数组去重的方法总结
2019/01/18 Javascript
Javascript删除数组里的某个元素
2019/02/28 Javascript
如何使用CSS3+JQuery实现悬浮墙式菜单
2019/06/18 jQuery
Array.filter中如何正确使用Async
2020/11/04 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
[04:14]从西雅图到上海——玩家自制DOTA2主题歌曲应援TI9
2019/07/11 DOTA
使用python将大量数据导出到Excel中的小技巧分享
2018/06/14 Python
pycharm解决关闭flask后依旧可以访问服务的问题
2020/04/03 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
自我鉴定范文
2013/11/10 职场文书
百年校庆节目主持词
2014/03/27 职场文书
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
服务承诺口号
2014/05/22 职场文书
2014年质检工作总结
2014/11/26 职场文书
安全生产警示教育活动总结
2015/05/09 职场文书
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android
Windows11里微软已经将驱动程序安装位置A盘删除
2021/11/21 数码科技