`
lvjun106
  • 浏览: 436872 次
  • 性别: Icon_minigender_1
  • 来自: 芜湖
社区版块
存档分类
最新评论

selenium 对于网络延时怎么处理?

 
阅读更多

在自动化测试或网络爬虫运行时,经常会用到网络状况不好的情况,那么之前写的代码就经常会出现异常,比如 NoSuchElementException或者 TimoutException 之类的。如下错误代码在网络不佳的情况下就会报错:

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.WebElement;
 
public class NewTest{
    public static void main(String[] args) throws InterruptedException {
        System.setProperty ( "webdriver.chrome.driver" ,
                "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" );
        WebDriver driver = new ChromeDriver();
        try{  
                driver.get("http://shanghai.anjuke.com");
                WebElement input=driver.findElement(By.xpath("//input[@id='glb_search0']"));
                input.sendKeys("selenium");
          
       }catch(Exception e){
                e.printStackTrace();
       }finally{
             
                driver.quit();
       }
}

 

 如果用 WebDriverWait这个类即可对代码进行可控。

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedCondition;
 
public class NewTest{
    public static void main(String[] args) throws InterruptedException {
        System.setProperty ( "webdriver.chrome.driver" ,
                "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" );
        WebDriver driver = new ChromeDriver();
        try{
            //设置页面加载超时时间为3S
            driver.manage().timeouts().pageLoadTimeout(3, TimeUnit.SECONDS);
            driver.get("http://shanghai.anjuke.com");
        }catch(Exception e){
            //3秒后抛出异常,但程序会继续向下处理,页面也会继续加载
        }finally{

            //最多等待10S,每2S检查一次
            WebDriverWait wait=new WebDriverWait(driver,10,2000);
            
            wait.until(new ExpectedCondition<Boolean>() {
                public Boolean apply(WebDriver driver) {
                    System.out.println("sleep");
                    return !(driver.findElements(By.xpath("//div[@id='city-panel']")).size() > 0);
                }
            });
            
         
            driver.quit();      
        }
        
}

 如果 你觉得这段代码不好用,也可以自己写。如下:

//每2S 检查一次,但无休止地检查,直到页面加载完成为止
while(true){
if( !(driver.findElements(By.xpath("//div[@id='city-panel']")).size() > 0)) {
Thread.sleep(2000);
}else {
break;
}
}

 

分享到:
评论

相关推荐

    selenium-windows.zip

    标题"Selenium-windows.zip"指的是一个使用Selenium框架在Windows操作系统上的爬虫项目,该项目的主要目的是实现1688网站的以图搜图功能。在这个过程中,我们将深入探讨Selenium的基本概念、Windows环境下的配置、...

    用selenium爬猎聘职位列表_猎聘_爬虫_python_selenium_

    本案例主要探讨如何使用Python的Selenium库来爬取猎聘网站的职位列表,这对于数据分析、人才招聘研究或个人求职者了解市场动态都有很大帮助。由于常规的HTTP请求库如requests无法处理动态加载的内容,Selenium成为了...

    PYTHON爬虫+selenium+Request+Python 网络数据采集

    本资料包主要涵盖了使用Python进行网络数据采集的相关知识,包括基础的requests库、高级的selenium库以及正则表达式的应用。 首先,我们来详细了解`requests`库。这是一个非常实用的Python模块,用于发送HTTP请求,...

    PythonSelenium网络爬虫工具解决滑块验证码

    在Web爬虫领域,Selenium 特别适用于处理动态网页和需要交互的验证码,比如滑块验证码。滑块验证码是一种常见的网站安全机制,旨在防止自动化的爬虫程序访问或操作网站内容。 滑块验证码的原理是通过让用户将一个...

    selenium登录爬取京东商品信息(python爬虫例子)

    在Python编程领域,Selenium...在实际应用中,可能还需要处理验证码、滑动验证等复杂情况,以及考虑反爬虫策略,比如设置合适的延时、使用代理IP等。此外,注意遵守网站的robots.txt协议,合法合规地进行网络爬虫活动。

    通过python的selenium框架爬取考试宝典题目

    在IT行业中,网络爬虫是数据获取的重要工具,特别是在处理大量结构化网页数据时。Python作为一门编程语言,因其简洁的语法和丰富的库支持,成为爬虫开发的首选。本篇将详细介绍如何利用Python的Selenium框架来爬取...

    Python-删除Facebook墙上所有帖子的Selenium脚本

    此外,还应处理可能出现的异常,如网络错误、找不到元素等,以确保脚本的健壮性。 `weskerfoot-DeleteFB-f25b48b`可能是这个项目或脚本的版本号,可能包含了完整的源代码、配置文件和其他辅助资源。如果你想要运行...

    Python+selenium 职位信息爬取

    在数据处理和网络爬虫领域,Python拥有众多优秀库,如requests用于HTTP请求,BeautifulSoup或lxml用于HTML解析,以及我们这里提到的selenium库,它主要用于模拟浏览器行为,从而能够抓取JavaScript动态加载的内容。...

    selenium爬取京东商品信息.zip

    在IT行业中,网络爬虫是一种常见的数据获取技术,用于自动化地从互联网上抓取大量信息。Selenium是一款功能强大的Web自动化测试工具,但它也可以被巧妙地用来进行网页爬虫的编写,尤其是对于那些动态加载或者需要...

    Selenium爬取内容并存储至MySQL数据库.docx

    这对于想要收集网络数据进行进一步分析的用户非常实用。 #### 二、Selenium简介 Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE (7, ...

    python+selenium+chrome 自动化测试TPshop商城项目实战(二)——通过cookies绕过验证码.pdf

    首先,我们导入必要的模块,包括`time`用于延时操作,`selenium`的`webdriver`模块用于驱动Chrome浏览器,以及`ActionChains`模块来实现鼠标和键盘的复杂交互。接下来,实例化Chrome浏览器对象并打开指定URL,然后...

    基于Python和Selenium的新浪微博数据访问.zip

    在实际操作中,可能还需要处理验证码、滑动验证等复杂情况,以及处理反爬策略,比如设置延时、更换User-Agent等。 微博数据抓取后,可以进一步清洗、存储和分析。Python有许多库,如Pandas、Numpy和Matplotlib,...

    selenium淘宝爬虫实战 示例码源.zip

    在IT行业中,网络爬虫是一种常见的数据获取技术,用于自动化地从互联网上抓取大量信息。Selenium 是一个强大的...对于初学者来说,这是一个很好的实践项目,有助于深入理解Selenium的使用以及动态网页的抓取策略。

    Java爬虫,使用WebMagis+selenium爬取某东商品信息.zip

    2. **Selenium集成**:在某些情况下,WebMagic可能无法处理JavaScript渲染的页面,这时就需要Selenium介入。Selenium能够控制浏览器,加载动态内容,并且可以执行JavaScript代码,从而获取完整的信息。在JavaSpider-...

    selenium+python实现自动化登录的方法

    - 对于复杂的登录流程,如包含验证码、动态令牌、二次验证等,Selenium可能无法直接处理,需要额外的逻辑来应对。 - 在脚本执行过程中,可能会遇到元素加载延迟的情况,适当添加延时(time.sleep())可以提高脚本的...

    python实现windows自动化(webdriver+WinAppDriver+inspect.exe)(csdn.pdf

    - 首先,导入必要的库,包括`appium.webdriver`用于WinAppDriver操作,`selenium.webdriver.common.by`定义定位器,以及`time`库处理延时。 - `desired_caps`字典用来设置WinAppDriver的配置,其中`app`属性指定了...

    《用Python写网络爬虫》随书源代码

    对于反爬策略,可以通过设置延时、更换User-Agent、使用代理IP等方式应对。对于动态加载内容,可能需要利用Selenium、Scrapy等工具模拟浏览器行为。至于多线程和异步,Python的threading模块和asyncio库可以提高爬虫...

    基于C#的网络爬虫程序设计.zip

    总的来说,“基于C#的网络爬虫程序设计”项目涵盖了C#网络编程、HTML解析、异步编程、模拟浏览器行为、错误处理和数据存储等多个方面,对于想要深入学习C#爬虫开发的开发者来说,是一份宝贵的资源。通过实践这个项目...

    网络爬虫资料,全套Java写的

    - CAPTCHA识别:对于验证码的处理,可能需要第三方服务或机器学习技术。 7. **数据存储与处理** - 数据库:MySQL、MongoDB等数据库用于存储爬取的数据,理解SQL查询和NoSQL存储的优势。 - JSON与XML:数据交换...

    网络抓取蜘蛛源程序

    在这个网络蜘蛛源程序中,开发者可能使用了`System.Net`和`System.IO`命名空间来处理网络请求和文件操作,还可能利用了`System.Threading`或`System.Threading.Tasks`来实现多线程或异步操作,提高抓取速度。...

Global site tag (gtag.js) - Google Analytics