Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Selenium公共异常超时异常消息:超时错误_Python_Selenium - Fatal编程技术网

Python Selenium公共异常超时异常消息:超时错误

Python Selenium公共异常超时异常消息:超时错误,python,selenium,Python,Selenium,我一直在为OkCupid编写一个在线状态检查脚本。那么,如果我监视的人登录OkCupid,脚本将根据登录后显示的来检测它。它每分钟循环一次,以查看是否有任何状态更改。在大多数情况下,它运行良好,可以持续30-40分钟,但随后崩溃。 脚本的输出如下所示: ---------------------------------------------- [i] Status | Last Checked | Update | -----------------------------

我一直在为OkCupid编写一个在线状态检查脚本。那么,如果我监视的人登录OkCupid,脚本将根据登录后显示的
来检测它。它每分钟循环一次,以查看是否有任何状态更改。在大多数情况下,它运行良好,可以持续30-40分钟,但随后崩溃。 脚本的输出如下所示:

----------------------------------------------
[i] Status   |   Last Checked   |   Update   |
----------------------------------------------
[-] Offline      08-14 18:33:03     60 Sec   |
[+] Online       08-14 18:34:05     60 Sec   |
[+] Online       08-14 18:35:09     60 Sec   |
[+] Online       08-14 18:36:10     60 Sec   |
----------------------------------------------
这是一个循环:

try:
while 1:
        status = driver.find_elements_by_tag_name('div')[41].get_attribute('class') # Span Class for Online status
        driver.refresh()
        time_online = datetime.now().strftime('%m-%d %H:%M:%S')
        time.sleep(5)
        if status == str('userinfo2015-basics-username-online-icon isOnline'):
            print('[+]  Online'+7*' '+time_online+5*' '+str(update+5)+' Sec   |')
        elif status != str('userinfo2015-basics-username-online-icon isOnline'):
            print(bc.red+'[-] Offline'+6*' '+time_online+5*' '+str(update+5)+' Sec   |')
        time.sleep(update)
except KeyboardInterrupt:
        print('  Exiting\n'+46*'-')
driver.quit()
然后是错误:

Traceback (most recent call last):
File "okCupid_online_status.py", line 38, in <module>
    status = driver.find_elements_by_tag_name('div')[41].get_attribute('class') # Span Class for Online status
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 539, in find_elements_by_tag_name
    return self.find_elements(by=By.TAG_NAME, value=name)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 985, in find_elements
    'value': value})['value'] or []
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 314, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: timeout
  (Session info: chrome=67.0.3396.99)
  (Driver info: chromedriver=2.39.562737 (dba483cee6a5f15e2e2d73df16968ab10b38a2bf),platform=Linux 4.15.0-29-generic x86_64)
回溯(最近一次呼叫最后一次):
文件“okCupid_online_status.py”,第38行,在
状态=驱动程序。通过标记名称('div')[41]查找元素。获取属性('class')#跨类获取联机状态
文件“/usr/local/lib/python2.7/dist packages/selenium/webdriver/remote/webdriver.py”,第539行,按标签名称查找元素
返回self.find_元素(by=by.TAG_NAME,value=NAME)
文件“/usr/local/lib/python2.7/dist packages/selenium/webdriver/remote/webdriver.py”,第985行,在find_元素中
'value':value})['value']或[]
文件“/usr/local/lib/python2.7/dist packages/selenium/webdriver/remote/webdriver.py”,执行中第314行
self.error\u handler.check\u响应(响应)
文件“/usr/local/lib/python2.7/dist packages/selenium/webdriver/remote/errorhandler.py”,第242行,在check_响应中
引发异常类(消息、屏幕、堆栈跟踪)
selenium.common.Exception.TimeoutException:消息:超时
(会话信息:chrome=67.0.3396.99)
(驱动程序信息:chromedriver=2.39.562737(dba483cee6a5f15e2e2d73df16968ab10b38a2bf),平台=Linux 4.15.0-29-generic x86_64)

因此,我更想知道,如果发生这种情况,我是否可以引发异常并绕过错误,让我的脚本继续循环?

很难确定,但根据我的经验,Selenium中的超时异常通常在浏览器页面没有响应时发生。下次发生的时候,我建议你检查一下情况是否如此


如果确实是这样,那么因为您正在创建一个scraper(与测试自动化相反),您应该捕获异常并重试。如果您要编写测试自动化,我会说您应该报告一个错误,因为没有响应的页面通常是页面JavaScript代码中的一个错误。

您能捕获该异常并让循环再次运行吗?有时您也可以退出驱动程序,过一会儿再打开它