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爬虫番外篇之Cookie和Session详解
Dec 27 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
Apr 18 Python
Python从单元素字典中获取key和value的实例
Dec 31 Python
浅析Python 读取图像文件的性能对比
Mar 07 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 Python
使用Python脚本zabbix自定义key监控oracle连接状态
Aug 28 Python
Python argparse模块应用实例解析
Nov 15 Python
Python 实现自动登录+点击+滑动验证功能
Jun 10 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
Oct 16 Python
python爬虫scrapy框架的梨视频案例解析
Feb 20 Python
python实现学生通讯录管理系统
Feb 25 Python
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
Apr 03 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
php5 non-thread-safe和thread-safe这两个版本的区别分析
2010/03/13 PHP
详解PHP匿名函数与注意事项
2016/03/29 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
2019/10/24 PHP
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
2015/04/20 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
2016/06/08 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
[00:42]《辉夜杯》—职业组预选赛12月3日15点 正式打响
2015/12/03 DOTA
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
2017/04/24 Python
python和ruby,我选谁?
2017/09/13 Python
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
pandas apply 函数 实现多进程的示例讲解
2018/04/20 Python
python游戏地图最短路径求解
2019/01/16 Python
pytorch中的自定义数据处理详解
2020/01/06 Python
Python爬虫小例子——爬取51job发布的工作职位
2020/07/10 Python
纯DOM+CSS3实现简单的小风车动画
2016/09/27 HTML / CSS
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
高分子材料与工程专业推荐信
2013/12/01 职场文书
酒吧总经理岗位职责
2013/12/10 职场文书
晚宴邀请函范文
2014/01/15 职场文书
财务总经理岗位职责
2014/02/16 职场文书
五一手机促销方案
2014/03/08 职场文书
小学生期末评语
2014/04/21 职场文书
刑事和解协议书范本
2014/11/19 职场文书
先进党组织事迹材料
2014/12/26 职场文书
语文教师个人工作总结
2015/02/06 职场文书
辞职信怎么写
2015/02/27 职场文书
教师师德表现自我评价
2015/03/05 职场文书
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server