从 gif 直观地感受一下效果
我有大量 url 需要访问,但是有些 url 会超时
为了避免超时,设置driver.set_page_load_timeout(3)
限时3秒,一旦超时就会产生 TimeoutException
而且超时后标签页就卡柱了,只能通过 driver.close()
关闭
如果你只有一个标签页,关闭就直接退出了,还得重启
自然想到先保留一个备用的标签,原标签超时需要关闭的时候就切换过来,然后再关闭,并打开新标签,保证任何时候都有两个标签页可用!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
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 |
完整代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
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超时内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/itnerd/article/details/108282337