在自动化测试或网络爬虫运行时,经常会用到网络状况不好的情况,那么之前写的代码就经常会出现异常,比如 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操作系统上的爬虫项目,该项目的主要目的是实现1688网站的以图搜图功能。在这个过程中,我们将深入探讨Selenium的基本概念、Windows环境下的配置、...
本案例主要探讨如何使用Python的Selenium库来爬取猎聘网站的职位列表,这对于数据分析、人才招聘研究或个人求职者了解市场动态都有很大帮助。由于常规的HTTP请求库如requests无法处理动态加载的内容,Selenium成为了...
本资料包主要涵盖了使用Python进行网络数据采集的相关知识,包括基础的requests库、高级的selenium库以及正则表达式的应用。 首先,我们来详细了解`requests`库。这是一个非常实用的Python模块,用于发送HTTP请求,...
在Web爬虫领域,Selenium 特别适用于处理动态网页和需要交互的验证码,比如滑块验证码。滑块验证码是一种常见的网站安全机制,旨在防止自动化的爬虫程序访问或操作网站内容。 滑块验证码的原理是通过让用户将一个...
在Python编程领域,Selenium...在实际应用中,可能还需要处理验证码、滑动验证等复杂情况,以及考虑反爬虫策略,比如设置合适的延时、使用代理IP等。此外,注意遵守网站的robots.txt协议,合法合规地进行网络爬虫活动。
在IT行业中,网络爬虫是数据获取的重要工具,特别是在处理大量结构化网页数据时。Python作为一门编程语言,因其简洁的语法和丰富的库支持,成为爬虫开发的首选。本篇将详细介绍如何利用Python的Selenium框架来爬取...
此外,还应处理可能出现的异常,如网络错误、找不到元素等,以确保脚本的健壮性。 `weskerfoot-DeleteFB-f25b48b`可能是这个项目或脚本的版本号,可能包含了完整的源代码、配置文件和其他辅助资源。如果你想要运行...
在数据处理和网络爬虫领域,Python拥有众多优秀库,如requests用于HTTP请求,BeautifulSoup或lxml用于HTML解析,以及我们这里提到的selenium库,它主要用于模拟浏览器行为,从而能够抓取JavaScript动态加载的内容。...
在IT行业中,网络爬虫是一种常见的数据获取技术,用于自动化地从互联网上抓取大量信息。Selenium是一款功能强大的Web自动化测试工具,但它也可以被巧妙地用来进行网页爬虫的编写,尤其是对于那些动态加载或者需要...
这对于想要收集网络数据进行进一步分析的用户非常实用。 #### 二、Selenium简介 Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE (7, ...
首先,我们导入必要的模块,包括`time`用于延时操作,`selenium`的`webdriver`模块用于驱动Chrome浏览器,以及`ActionChains`模块来实现鼠标和键盘的复杂交互。接下来,实例化Chrome浏览器对象并打开指定URL,然后...
在实际操作中,可能还需要处理验证码、滑动验证等复杂情况,以及处理反爬策略,比如设置延时、更换User-Agent等。 微博数据抓取后,可以进一步清洗、存储和分析。Python有许多库,如Pandas、Numpy和Matplotlib,...
在IT行业中,网络爬虫是一种常见的数据获取技术,用于自动化地从互联网上抓取大量信息。Selenium 是一个强大的...对于初学者来说,这是一个很好的实践项目,有助于深入理解Selenium的使用以及动态网页的抓取策略。
2. **Selenium集成**:在某些情况下,WebMagic可能无法处理JavaScript渲染的页面,这时就需要Selenium介入。Selenium能够控制浏览器,加载动态内容,并且可以执行JavaScript代码,从而获取完整的信息。在JavaSpider-...
- 对于复杂的登录流程,如包含验证码、动态令牌、二次验证等,Selenium可能无法直接处理,需要额外的逻辑来应对。 - 在脚本执行过程中,可能会遇到元素加载延迟的情况,适当添加延时(time.sleep())可以提高脚本的...
- 首先,导入必要的库,包括`appium.webdriver`用于WinAppDriver操作,`selenium.webdriver.common.by`定义定位器,以及`time`库处理延时。 - `desired_caps`字典用来设置WinAppDriver的配置,其中`app`属性指定了...
对于反爬策略,可以通过设置延时、更换User-Agent、使用代理IP等方式应对。对于动态加载内容,可能需要利用Selenium、Scrapy等工具模拟浏览器行为。至于多线程和异步,Python的threading模块和asyncio库可以提高爬虫...
总的来说,“基于C#的网络爬虫程序设计”项目涵盖了C#网络编程、HTML解析、异步编程、模拟浏览器行为、错误处理和数据存储等多个方面,对于想要深入学习C#爬虫开发的开发者来说,是一份宝贵的资源。通过实践这个项目...
- CAPTCHA识别:对于验证码的处理,可能需要第三方服务或机器学习技术。 7. **数据存储与处理** - 数据库:MySQL、MongoDB等数据库用于存储爬取的数据,理解SQL查询和NoSQL存储的优势。 - JSON与XML:数据交换...
在这个网络蜘蛛源程序中,开发者可能使用了`System.Net`和`System.IO`命名空间来处理网络请求和文件操作,还可能利用了`System.Threading`或`System.Threading.Tasks`来实现多线程或异步操作,提高抓取速度。...