当前位置:   article > 正文

python Selenium chromedriver 自动化超时报错:你需要使用多标签保护罩护体_selenium driver timeoutexception

selenium driver timeoutexception

在使用selenium + chrome 作自动化测试的时候,有可能会出现网页连接超时的情况

如果出现网页连接超时,将会导致 webdriver 也跟着无法响应,不能继续进行任何操作

即时是去打开新的连接也会报Time out错误

那么如果有很多连接要去做弹窗抓取,却不想因为其中一两个页面超时而中断进程该怎么办呢?

这时候你需要一个备用标签做金刚保护罩来护体!

具体的思路是在打开需求页面之后,再次开启一个新的标签去访问一个一定不会超时的页面(如百度),此时窗口句柄不要切换,依旧按照自己的逻辑去操作,当出现页面超时情况的时候,关闭原有标签,设置主窗口句柄到百度页面所在的标签通过get访问后续的连接,同时在开启一个标签做保护罩即可。

相关代码实现:

  1. from selenium import webdriver
  2. from selenium.webdriver.chrome.options import Options
  3. chrome_options = Options()
  4. prefs = {
  5. 'profile.default_content_setting_values': {
  6. 'images': 2, # 禁用图片的加载
  7. 'javascript': 2 ##禁用js,可能会导致通过js加载的互动数抓取失效
  8. }
  9. }
  10. chrome_options.add_experimental_option("prefs", prefs)
  11. # chrome_options.add_argument("--headless") # 不弹出浏览器
  12. browser = webdriver.Chrome(chrome_options=chrome_options)
  13. browser.implicitly_wait(5) # 操作、获取元素时的隐式等待时间
  14. browser.set_page_load_timeout(10) # 页面加载超时等待时间
  15. main_win = browser.current_window_handle #记录当前窗口的句柄
  16. all_win = browser.window_handles
  17. # 开始访问页面
  18. print 'Opening page'
  19. urls = [] # 定义你想要抓取的全部的页面
  20. for url in urls:
  21. try:
  22. if len(all_win) == 1:
  23. print '弹出保护罩'
  24. js = 'window.open("https://www.baidu.com");'
  25. browser.execute_script(js)
  26. # 还是定位在main_win上的
  27. for win in all_win:
  28. if main_win != win:
  29. print '保护罩WIN', win, 'Main', main_win
  30. browser.switch_to.window(main_win)
  31. browser.get(url) # 此处访问你需要的URL
  32. body = browser.page_source
  33. html = etree.HTML(body)
  34. # 下面是你的抓取逻辑 省略
  35. except:
  36. # 超时
  37. print 'Time out'
  38. # 切换新的浏览器窗口
  39. for win in all_win:
  40. if main_win != win:
  41. print 'WIN', win, 'Main', main_win
  42. print '切换到保护罩'
  43. browser.close()
  44. browser.switch_to.window(win)
  45. main_win = win
  46. js = 'window.open("https://www.baidu.com");'
  47. browser.execute_script(js)
  48. if 'time' in str(traceback.format_exc()):
  49. print '页面访问超时'

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/177876
推荐阅读
相关标签
  

闽ICP备14008679号