精华内容
下载资源
问答
  • set_script_timeout
    万次阅读 多人点赞
    2017-03-19 21:16:14

    用selenium爬网页,很多时候页面里面的有用信息其实已经加载完成了,但是由于页面加载没有彻底完成,下一步操作仍然不会执行,很耽误时间。

    然后很多其他文章中提到了一种方法:

    d.set_page_load_timeout(10)
    然而在我的测试下,这种方法不论是在firefox下还是在PhantomJS下,都不起作用。所以我查了一下文档,还有一种设置超时的方法:

    from selenium import webdriver
    d= webdriver.PhantomJS()
    d.set_page_load_timeout(10)
    d.set_script_timeout(10)#这两种设置都进行才有效


    我测试之后发现是可用的,超时就会提示错误。

    try:
    	d.get(s)
    except:
    	d.execute_script('window.stop()')

    这样,就可以在页面停止加载后继续操作了。

    
    
    
    
    更多相关内容
  • set_page_load_timeout()

    最开始学习web自动化测试就遇到一个小困扰,有时候设计的用例可能会打开新浪、腾讯这些网站,等待网页加载完成都要小半分钟。最近重拾web自动化测试,又遇到这个困扰。

    个人博客:https://blog.csdn.net/zyooooxie

    今天分享下:通过set_page_load_time()方法来设定时间,然后捕获timeout异常 并通过执行JS命令来停止页面加载 window.stop()

    一)set_page_load_timeout()

    下面是源码。

    可以看到 set_page_load_timeout() 设置网页超时加载时间 需要传入一个time_to_wait

        def set_page_load_timeout(self, time_to_wait):
            """
            Set the amount of time to wait for a page load to complete
               before throwing an error.
    
            :Args:
             - time_to_wait: The amount of time to wait
    
            :Usage:
                driver.set_page_load_timeout(30)
            """
            try:
                self.execute(Command.SET_TIMEOUTS, {
                    'pageLoad': int(float(time_to_wait) * 1000)})
            except WebDriverException:
                self.execute(Command.SET_TIMEOUTS, {
                    'ms': float(time_to_wait) * 1000,
                    'type': 'page load'})
    
    

    在Web自动化脚本执行时,浏览器打开网址会一直等待整个页面加载完成,但有时候页面想要的元素早就加载完成了,但是因为个别js之类的东西特别慢,只能干等着。

    因为没有设置超时时间而且get方法默认是等待页面全部加载完成才会执行下一步

    二)实战

        def test_59c(self):
            """set_page_load_timeout"""
            driver = webdriver.Chrome()
            driver.set_page_load_timeout(8)     # 可以自行设置加载时间
            print('0', time.ctime())
            try:
                driver.get("https://www.sina.com.cn/")      # 普通情况下,设置的 超时加载时间远远小于实际网页加载完成需要的时间,所以肯定会报错
            except:
                driver.execute_script('window.stop()')      # 执行Javascript来停止页面加载 window.stop()
                print('2', time.ctime())
            print('3', time.ctime())
            time.sleep(1)
            driver.quit()
    

    浏览器关闭前,等待一秒的时候,可以看到网页已经停止加载,浏览器标签栏那个小圈不再转。

    在这里插入图片描述

        def wangzhi(self, net):
            from selenium.common.exceptions import TimeoutException
            self.driver = webdriver.Chrome()
            self.driver.maximize_window()
            self.driver.set_page_load_timeout(10)        # 设定时间
            try:
                self.driver.get(net)
            except TimeoutException:        # 捕获timeout异常
                self.driver.execute_script('window.stop()')     # 执行Javascript来停止页面加载 window.stop()
    

    可以把这一部分代码封装成方法,直接调用就可以。但是实际用处不是很大。只是一个小麻烦而已。

    交流技术 欢迎+QQ 153132336 zy
    个人博客 https://blog.csdn.net/zyooooxie

    展开全文
  • php的set_time_out和max_execution_time设置

    千次阅读 2018-03-29 11:21:49
    本意想让一个php脚本(fpm或者cli下)通过set_time_out或者max_execution_time设置只执行5秒。我原想是这样的代码<?php ini_set("max_execution_time",5); set_time_limit(5); for($i=0;$i<...

    本意

    想让一个php脚本(fpm或者cli下)通过set_time_out或者max_execution_time设置只执行5秒。

    我原想是这样的代码

    <?php
    ini_set("max_execution_time",5);
    set_time_limit(5);
    for($i=0;$i<=10;$i++)
    {
    echo $i."\n";
    sleep(1);
    }
    

    但是cli下结果是

    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    fpm也一样。

    思考之路

    首先看手册函数啊,摘超如下:

    set_time_limit()函数和配置指令max_execution_time只影响脚本本身执行的时间。任何发生在诸如使用system()的系统调用,流操作,数据库操作等的脚本执行的最大时间不包括其中,当该脚本已运行。在测量时间是实值的Windows中,情况就不是如此了。

    仍然是一脸懵逼。
    另外看到另外一句:

    当php运行于安全模式时,此功能不能生效。除了关闭安全模式或改变php.ini中的时间限制,没有别的办法

    特地看了一眼,不是安全模式啊。。

    然后百思不得,得到了大官人的耐心解答。

    php zend引擎实现max_execute_time是使用的settimer,参数是ITIMER_PROF(也就是说这只计算用户态和内核态使用的真正消耗的时间)
    但是sleep是挂起进程一段时间,并没有执行操作,也不存在消耗时间,所以这个sleep既不消耗内核态时间也不消耗用户态时间。
    写了段C程序验证了一下,确实在sleep状态下,根本没有时间统计,也不会触发signal handler..

    那我追一下这个[ITIMER_PRO][3]F参数

    Description
    The system provides each process with three interval timers, each decrementing in a distinct time domain. When any timer expires, a signal is sent to the process, and the timer (potentially) restarts.

    ITIMER_REAL
    decrements in real time, and delivers SIGALRM upon expiration.

    ITIMER_VIRTUAL

    decrements only when the process is executing, and delivers SIGVTALRM upon expiration.

    ITIMER_PROF

    decrements both when the process executes and when the system is executing on behalf of the process. Coupled with ITIMER_VIRTUAL, this timer is usually used to profile the time spent by the application in user and kernel space. SIGPROF is delivered upon expiration.

    看ITIMER_PROF选项中process executes 不就是php进程执行吗?是进程执行没问题,但是sleep函数会将进程挂起,所以sleep内的不算了。所以,在用户态执行的时间,是除开你sleep后的所有时间

    果真有具体差别,那么源码中中具体怎样体现的?再追一下

    main.c下追到以下

    /* {{{ proto bool set_time_limit(int seconds)
       Sets the maximum time a script can run */
    PHP_FUNCTION(set_time_limit)
    {
        zend_long new_timeout;
        char *new_timeout_str;
        int new_timeout_strlen;
        zend_string *key;
    
        if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &new_timeout) == FAILURE) {
            return;
        }
    
        new_timeout_strlen = (int)zend_spprintf(&new_timeout_str, 0, ZEND_LONG_FMT, new_timeout);
    
        key = zend_string_init("max_execution_time", sizeof("max_execution_time")-1, 0);
        if (zend_alter_ini_entry_chars_ex(key, new_timeout_str, new_timeout_strlen, PHP_INI_USER, PHP_INI_STAGE_RUNTIME, 0) == SUCCESS) {
            RETVAL_TRUE;
        } else {
            RETVAL_FALSE;
        }
        zend_string_release(key);
        efree(new_timeout_str);
    }

    我们看key那一行的sizeof("max_execution_time")
    然后追一下max_execution_time
    还是再main.c下,有

            }
            if (PG(max_input_time) != -1) {
    #ifdef PHP_WIN32
                zend_unset_timeout();
    #endif
                zend_set_timeout(INI_INT("max_execution_time"), 0);
            }
    

    然后再zend目录下搜索zend_set_timeout,然后再zend_execute_api.c中找到ITIMER_PROF


    就是他了!

    展开全文
  • Selenium最全超时等待问题的处理方案

    万次阅读 2019-04-05 23:13:55
    set_script_timeout,用于execute_async_script()执行的异步js超时报错。 注意:使用set_page_load_timeout时候,当页面未加载出任何东西的时候(往往是html源码未加载),因为超时而停止,会导致driver失效,...

    Selenium广泛应用于自动化测试和自动化业务开发,同时在网络爬虫中也有较多的应用,使用Selenium有两个核心的问题:第一个是如何在爬虫领域不被识别出来,另一个是在自动化领域如何解决超时加载的问题。

    今天来总结一下处理Selenium在自动化业务中的超时加载,让程序不在奔溃,同时能准确的获取信息。

    首先需要区分两种超时情况,一种是页面加载出现的超时,一种是获取页面元素的超时。

    对于页面加载出现的超时,Selenium提供了两个设置:

    driver.set_page_load_timeout()  # 设置页面加载超时
    driver.set_script_timeout()  # 设置页面异步js执行超时
    
    

    set_page_load_timeout是用于设置页面加载超时,如下图在指定时间内未加载出页面则会报错。

    image

    set_script_timeout,用于execute_async_script()执行的异步js超时报错。

    注意:使用set_page_load_timeout时候,当页面未加载出任何东西的时候(往往是html源码未加载),因为超时而停止,会导致driver失效,后面的driver都不能操作,所以超时设置应该至少保证页面内容加载出来一部分,设置超时不宜过短,如下图在页面此种状态下停止加载后driver失效。

    image

    页面加载超时在打开新页面、页面刷新、跳转等方法执行中会起作用,对于页面异步加载超时问题可以配合使用js停止,该js语法如下:

    window.stop()
    
    

    该方法类似在浏览器上点击停止载入按钮,如果页面在载入图片或框架(iframe)时间过长,我门可以使用该方法来停止载入。

    第二种是获取页面元素的超时,又分为隐式等待(implicit) 和 显示等待(explicit)。

    隐式等待(implicit)

    隐式等待是设置全局的查找页面元素的等待时间,在这个时间内没找到指定元素则抛出异常,只需设置一次,语法如下:

    driver.implicitly_wait(time)
    
    

    显示等待(explicit)

    显式等待是使用频率最高的获取页面元素超时设置,其原理是通过设置一个最大时间和一个周期时间,按照周期时间来检测是否出现等待元素,直到达到了最大等待时间。

    显示等待的基本语法如下:

    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.ID, 'wrapper')))
    WebDriverWait(driver, 3).until_not(EC.presence_of_element_located((By.ID, 'wrapper1')))
    
    

    其中WebDriverWait用来给指定driver设置超时时间,until、until_not有两个参数method、message,method是EC即expected_conditions类提供的预先判断条件,message是在超时发生时候的提示信息。

    until用来检测指定元素是否出现,如果在超时时间内出现则返回选择器信息,否则报出TimeoutException异常。

    until_not用于检测指定元素是否消失,如果在超时时间内消失则返回True,否则会报出TimeoutException异常。

    method是EC即expected_conditions类提供的预先判断条件如下:

    WebDriverWait(driver,10).until(EC.title_is(u"百度一下,你就知道"))
    # 判断title,返回布尔值
    
    WebDriverWait(driver,10).until(EC.title_contains(u"百度一下"))
    # 判断title,返回布尔值
    
    WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'kw')))
    # 判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回WebElement
    
    WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,'su')))
    # 判断某个元素是否被添加到了dom里并且可见,可见代表元素可显示且宽和高都大于0
    
    WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element(by=By.ID,value='kw')))
    # 判断元素是否可见,如果可见就返回这个元素
    
    WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.mnav')))
    # 判断是否至少有1个元素存在于dom树中,如果定位到就返回列表
    
    WebDriverWait(driver,10).until(EC.visibility_of_any_elements_located((By.CSS_SELECTOR,'.mnav')))
    # 判断是否至少有一个元素在页面中可见,如果定位到就返回列表
    
    WebDriverWait(driver,10).until(EC.text_to_be_present_in_element((By.XPATH,"//*[@id='u1']/a[8]"),u'设置'))
    # 判断指定的元素中是否包含了预期的字符串,返回布尔值
    
    WebDriverWait(driver,10).until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR,'#su'),u'百度一下'))
    # 判断指定元素的属性值中是否包含了预期的字符串,返回布尔值
    
    #WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it(locator))
    #  判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False注意这里并没有一个frame可以切换进去
    
    WebDriverWait(driver,10).until(EC.invisibility_of_element_located((By.CSS_SELECTOR,'#swfEveryCookieWrap')))
    # 判断某个元素在是否存在于dom或不可见,如果可见返回False,不可见返回这个元素注意#swfEveryCookieWrap在此页面中是一个隐藏的元素
    
    WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='u1']/a[8]"))).click()
    # 判断某个元素中是否可见并且是enable的,代表可点击
    driver.find_element_by_xpath("//*[@id='wrapper']/div[6]/a[1]").click()
    WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='wrapper']/div[6]/a[1]"))).click()
    
    WebDriverWait(driver,10).until(EC.staleness_of(driver.find_element(By.ID,'su')))
    # 等待某个元素从dom树中移除
    
    WebDriverWait(driver,10).until(EC.element_to_be_selected(driver.find_element(By.XPATH,"//*[@id='nr']/option[1]")))
    # 判断某个元素是否被选中了,一般用在下拉列表
    
    WebDriverWait(driver,10).until(EC.element_selection_state_to_be(driver.find_element(By.XPATH,"//*[@id='nr']/option[1]"),True))
    # 判断某个元素的选中状态是否符合预期
    
    WebDriverWait(driver,10).until(EC.element_located_selection_state_to_be((By.XPATH,"//*[@id='nr']/option[1]"),True))
    # 判断某个元素的选中状态是否符合预期
    driver.find_element_by_xpath(".//*[@id='gxszButton']/a[1]").click()
    
    instance = WebDriverWait(driver,10).until(EC.alert_is_present())
    # 判断页面上是否存在alert,如果有就切换到alert并返回alert的内容
    instance.accept()
    # 关闭弹窗
    
    

    部分配置来源参考:https://www.cnblogs.com/wxcx/p/8948280.html

    注意:显示等待和隐式等待都存在的,按照其中超时时间设置最大的方式来执行。

    展开全文
  • PHP:ignore_user_abort()+set_time_limit(0)+sleep($interval)实现计划任务
  • driver.set_page_load_timeout(3) 页面加载时间设置 3 秒,执行到某一步涉及页面加载如果加载时间超过 3 秒就会停止加载...set_script_timeout() 设置脚本在execute_async_script调用期间抛出错误之前应该等待的时间。
  • PHP cURL 的超时设置有两个 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT,他们的区别是: CURLOPT_CONNECTTIMEOUT用来告诉 PHP 在成功连接服务器前等待多久(连接成功之后就会开始缓冲输出),这个参数是为了应对...
  • set_time_limit() set_time_limit — 设置脚本最大执行时间 说明 void set_time_limit ( int $seconds ) 设置允许脚本运行的时间,单位为秒。如果超过了此设置,脚本返回一个致命的错误。...
  • PHP中default_socket_timeout配置…

    万次阅读 2016-03-04 10:04:38
    最近最近在学习些PoC,发现大部分PoC都会有这样一句ini_set('default_socket_timeout', 5) ,意思就是设置default_socket_timeout这个配置参数为5。不知道这个配置是什么意思,到官网上查了下,给出的解释也很简单 ...
  • driver.set_script_timeout(5)#这两种设置都进行才有效 try: d.get(s) except: d.execute_script('window.stop()')#这句话好像没什么软用 可以在页面停止加载后继续操作了 driver.set_page_load_time...
  • php脚本运行时的超时机制详解

    千次阅读 2021-03-22 21:27:27
    在做php开发的时候,经常会设置max_input_time、max_execution_time,用来控制脚本的超时时间。但却从来没有思考过背后的原理。趁着这两天有空,研究一下这个问题。超时配置php的ini配置如何起作用,这是一个...
  • PHP限定脚本执行时长的方式有几种,下面说下php.ini中的max_execution_time和php-fpm.conf中的request_terminate_timeout1. php.ini中的max_execution_time; Maximum execution time of each script, in seconds ; ...
  • selenium设置超时时间

    千次阅读 2020-04-17 17:09:56
    利用selenium请求网页的时候,有时因为某种原因使得页面一直处于加载状态,使得源代码一直不能返回。这种情况可以全局设置driver的加载时间,超时...driver.set_page_load_timeout(10) #页面加载超时时间 driver.se...
  • driver.set_page_load_timeout(5) driver.set_script_timeout(5)#这两种设置都进行才有效 try: d.get(s) except: d.execute_script('window.stop()')#这句话好像没什么软用 可以在页面停止加载后继续操作了 driver....
  • ...0 - NORMAL(正常) 1 - ABORTED(退出) 2 - TIMEOUT(超时) 当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。当远程客户端中断连接时,ABORTED 状态的标记将会被打开。远程客户端连接的中断通常是由用户
  • Springboot 连接池wait_timeout超时设置

    万次阅读 2018-05-27 16:18:44
    使用springboot 线程池连接MySQL时,mysql数据库wait_timeout 为8个小时,所以程序第二天发现报错,在url配置了 autoReconnect=true 也不行,查询配置以下 #验证连接的有效性 spring.datasource.test-while-idle=...
  • .Net Core 2.0连接Redis 后读取值报错Timeout 问题比较简单,解决方案也比较简单,这个错误的出现情况是在多人同时访问服务器然后连接redis读取的时候出现的也不是必现,是有一定几率出现,当然还有一个前提你首先...
  • set_time_limit 不起作用

    万次阅读 2012-05-11 16:23:06
    visitor 填了表格,提交后(我的php程序要进行一些网络查询,执行时间不可定),如果一段时间没看到结果页面,把页面关闭了,但是我不想php程序退出运行,怎么办? set_time_limit(10);... 百度搜:set_time_l
  • PrimeTime中的DMSA

    千次阅读 2021-08-07 09:40:20
    execute(双引号),也就是说变量的值基于master环境 remote_execute " # variable all_out evaluated at master report_timing -to $all_out " 由于这种远程执行是针对于每个被选中的scenario,所以每个scenario...
  • How to set splash timeout in scrapy-splash?

    千次阅读 2017-11-07 14:16:05
    https://stackoverflow.com/questions/44627694/how-to-set-splash-timeout-in-scrapy-splash I use scrapy-splash ... and set the timeout in args parameter of SplashRequest like this: yield
  • keepalived的script脚本不执行解决办法

    千次阅读 2021-06-14 00:30:33
    今天学习了一下nginx+keepalived的高可用配置,遇到script脚本不执行的坑,折磨几个小时,现将解决方案留档如下: 1、学会看日志
  • DC综合的一些基本命令

    千次阅读 2020-11-30 17:54:21
    Return the current date and time as a system-dependent integer value. The unit of the value is seconds, allowing it to be used for relative time calculations. file 命令:Tcl Built-In Commands file op
  • Fri Aug 25 16:37:31 2017 - [warning] HealthCheck: Got timeout on checking SSH connection to 10.194.41.231! at /usr/local/share/perl5/MHA/HealthCheck.pm line 298. Fri Aug 25 16:37:31 2017 - [info]  ...
  • 技术剖析中国菜刀原理

    千次阅读 2018-12-24 12:13:33
    @set_time_limit(0);@set_magic_quotes_runtime(0);echo("-&gt;|");;print(“hello PHP!”);;echo("|&lt;-");die(); 先用@ini_set(“display_errors”,“0”);临时关闭PHP的错误显示...
  • python selenium 停止页面加载,timeout

    千次阅读 2022-04-20 11:57:20
    第一种是键盘esc按键,有时候不是很灵 ... driver.set_page_load_timeout(5) try: driver.find_element_by_css_selector("a[class='company-name company-name-lite-vb']").click() except Bas
  • driver.set_script_timeout() driver.set_page_load_timeout()  desired_capabilities 十 截图 driver.get_screenshot_as_file("D:\\Test\\1.png") # 截图,并设置保存路径 driver.save_screenshot()...
  • 如果直接定位所查找的元素的话,可能会由于此元素尚未加载完毕找不到元素从而报错,由于网络不稳定这种情况出现的几率会大很多,一般解决方法的话,time.sleep()函数可以避免一些这种状况,但是缺少了灵活性。...
  • 最近在编写selenium自动化测试框架,遇到一个烦人的问题, driver.get()不执行完,浏览器页面一直在转圈圈,下面的代码根本就不会执行,耗时一天的...driver.set_page_load_timeout(2) try: driver.get(cls.base_url)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 115,259
精华内容 46,103
关键字:

set_script_timeout