鱼C论坛

 找回密码
 立即注册
查看: 2504|回复: 13

[已解决]求大佬教导!!!selenium问题

[复制链接]
发表于 2019-8-10 18:55:30 | 显示全部楼层 |阅读模式
20鱼币
本帖最后由 chen491733492 于 2019-8-10 18:57 编辑

请问,  使用selenium  页面加载的太慢,设置了超时时间, 但是当时间到了之后再 下图红色标注的地方会报错  timeout  , 怎么解决啊??????
最佳答案
2019-8-10 18:55:31
谷歌浏览器一旦TimeoutException,driver的所有操作都会报TimeoutException异常,不能进行下去了,可以换火狐浏览器
  1. from selenium.common.exceptions import TimeoutException

  2. from selenium import webdriver
  3. from selenium.webdriver.chrome.options import Options
  4. import time
  5. chrome_opt = Options()      
  6. chrome_opt.add_argument('--headless')
  7. chrome_opt.add_argument('--disable-gpu')   
  8. chrome_opt.add_argument('--window-size=1366,768')
  9. driver = webdriver.Chrome(options=chrome_opt)
  10. driver.set_page_load_timeout(5)

  11. driver.maximize_window()

  12. try:
  13.         driver.get('http://www.autohome.com.cn/')
  14.         
  15.         
  16. except TimeoutException:
  17.         print("超时")
  18.         try:
  19.                 driver.execute_script("window.stop")
  20.         except TimeoutException:
  21.                 print("出现错误2...")
  22.         
  23. driver.quit()
复制代码

所以driver.execute_script("window.stop")这个是执行不了的,上面的代码不知道能不能说明问题...

360截图17571120849670.png

最佳答案

查看完整内容

谷歌浏览器一旦TimeoutException,driver的所有操作都会报TimeoutException异常,不能进行下去了,可以换火狐浏览器 所以driver.execute_script("window.stop")这个是执行不了的,上面的代码不知道能不能说明问题...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-8-10 18:55:31 | 显示全部楼层    本楼为最佳答案   
谷歌浏览器一旦TimeoutException,driver的所有操作都会报TimeoutException异常,不能进行下去了,可以换火狐浏览器
  1. from selenium.common.exceptions import TimeoutException

  2. from selenium import webdriver
  3. from selenium.webdriver.chrome.options import Options
  4. import time
  5. chrome_opt = Options()      
  6. chrome_opt.add_argument('--headless')
  7. chrome_opt.add_argument('--disable-gpu')   
  8. chrome_opt.add_argument('--window-size=1366,768')
  9. driver = webdriver.Chrome(options=chrome_opt)
  10. driver.set_page_load_timeout(5)

  11. driver.maximize_window()

  12. try:
  13.         driver.get('http://www.autohome.com.cn/')
  14.         
  15.         
  16. except TimeoutException:
  17.         print("超时")
  18.         try:
  19.                 driver.execute_script("window.stop")
  20.         except TimeoutException:
  21.                 print("出现错误2...")
  22.         
  23. driver.quit()
复制代码

所以driver.execute_script("window.stop")这个是执行不了的,上面的代码不知道能不能说明问题...

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-8-10 22:11:16 | 显示全部楼层
将except Exception 修改为except TimeoutException 捕捉超时异常,然后在执行下面的代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-8-11 05:05:44 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-11 13:30:44 | 显示全部楼层
xue11 发表于 2019-8-10 22:11
将except Exception 修改为except TimeoutException 捕捉超时异常,然后在执行下面的代码

谢谢,我试试
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-11 13:41:14 | 显示全部楼层
xue11 发表于 2019-8-10 22:11
将except Exception 修改为except TimeoutException 捕捉超时异常,然后在执行下面的代码

试过了,无用,依旧报错
1.png
2.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-8-11 17:37:20 | 显示全部楼层
chrome遇上TimeoutException的时候,driver的所有操作都会报TimeoutException异常,后面的driver.execute_script("window.stop()")或者其他的driver方法就执行不了了,可以换火狐试试
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-8-11 17:43:48 | 显示全部楼层
采用二楼的建议,在前面导入一下from selenium.common.exceptions import TimeoutException,这样比较规范一点;其次我看别人的代码,有的,把try...exception TimeoutException...包装成一个函数,成功返回True,失败返回False。如果非要执行driver.execute_script("window.stop()")这个,建议用火狐
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-8-11 17:51:48 | 显示全部楼层
你可以这样测试一下,
  1. except TimeoutException:
  2.         print("超时")
  3.         try:
  4.                 driver.execute_script("window.stop")
  5.         except TimeoutException:
  6.                 print("出现错误2...")
复制代码


使用chrome,在出现TimeoutException时,再次执行一个 driver方法,会再次得到一个TimeoutException异常,执行一条print语句则不会。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-11 20:36:40 From FishC Mobile | 显示全部楼层
傻纸 发表于 2019-8-11 17:37
chrome遇上TimeoutException的时候,driver的所有操作都会报TimeoutException异常,后面的driver.execute_s ...

确实是停止加载后driver就都使用不了了。主要需要的就是停止加载后,把渲染后的html取出
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-11 20:38:20 From FishC Mobile | 显示全部楼层
傻纸 发表于 2019-8-11 17:43
采用二楼的建议,在前面导入一下from selenium.common.exceptions import TimeoutException,这样比较规范 ...

火狐的话可以停止加载后,继续使用driver吗,想要的就是取出html。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-8-11 22:21:28 | 显示全部楼层
chen491733492 发表于 2019-8-11 20:38
火狐的话可以停止加载后,继续使用driver吗,想要的就是取出html。

火狐的我也没试过,谷歌浏览器貌似找不到解决方法。。我找个时间试试看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-8-11 22:28:11 | 显示全部楼层
没试过再找时间帮你试一下
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-12 10:10:39 | 显示全部楼层
傻纸 发表于 2019-8-10 18:55
谷歌浏览器一旦TimeoutException,driver的所有操作都会报TimeoutException异常,不能进行下去了,可以换火 ...

试过了 火狐浏览器OK  谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-30 09:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表