`

Selenium2.41.0—获取动态资源

阅读更多

编写不易,转载请注明(http://shihlei.iteye.com/blog/2067716)!

一概述

    获取动态资源,可以使用HtmlUnit,但是其对JS的支持还是不够完善。相对与HtmlUnit还有一种驱动浏览器的下载还原工具Selenium。可以打开浏览器,获取网页,下载解析,支持dom,js,解析效果更好,但是打开浏览器速度方面有一定损失。个人实验,禁用CSS,图片下载,速度还尚可。

    Selenium也是自动化测试工具,支持驱动不同的浏览器,Firefox,IE,Chrome等,也包含HtmlUnit提供的驱动实现。

    本文描述Selenium驱动Firefox,请求响应,设置cookies,驱动JS等方法,用他登录某主流weibo还是不错的。

 

二 版本

 

<dependency>
	<groupId>org.seleniumhq.selenium</groupId>
	<artifactId>selenium-java</artifactId>
	<version>2.41.0</version>
</dependency>

 

三 典型应用

1)打开Google,搜索baidu

可以看到Firefox从打开,填写表单,到提交打开新页面过程。

 

/**
 * 打开google搜索百度
 * 
 * @param queryStr
 */
public static void demo() {
	String url = "http://www.google.com.hk";

	WebDriver webDriver = new FirefoxDriver();
	// 打开google
	webDriver.get(url);

	// 使用Selenium的dom模型获取form
	WebElement webElement = webDriver.findElement(By.name("q"));
	webElement.sendKeys("baidu");
	webElement.submit();

	// 通过判断 title 内容等待搜索页面加载完毕,Timeout 设置10秒

	(new WebDriverWait(webDriver, 100)).until(new ExpectedCondition<Boolean>() {
		public Boolean apply(WebDriver d) {
			return d.getTitle().toLowerCase().indexOf("baidu") != -1;
		}
	});

	String responseBody = webDriver.getPageSource();
	System.out.println("Response : " + responseBody);

	// 关闭浏览器
	webDriver.close();
}

 

2)获取动态网页

与下面的请求响应一样,打开页面等待加载完毕即可,JS填充页面,AJAX都OK。

 

四 样例

1)请求响应

 

public static void main(String[] args) throws Exception {
	String url = "http://www.google.com";
	WebDriver webDriver = new FirefoxDriver();
	// 打开google
	webDriver.get(url);
        String responseBody = webDriver.getPageSource();  
        System.out.println("Response : " + responseBody);  
	webDriver.quit();
}

 

(2)配置不加载资源

 

/**
 * 获得不加载 css,图片,flash的浏览器
 * @return
 */
public WebDriver getNoResouceWebDriver(){
	FirefoxProfile firefoxProfile = new FirefoxProfile();
	// 去掉css
	firefoxProfile.setPreference("permissions.default.stylesheet", 2);
	// 去掉图片
	firefoxProfile.setPreference("permissions.default.image", 2);
	// 去掉flash
	firefoxProfile.setPreference("dom.ipc.plugins.enabled.libflashplayer.so", false);
	return new FirefoxDriver(firefoxProfile);
}

 

(3)配置Firefox路径

启动报找不到Firefox的时候可以使用:System.setProperty("webdriver.firefox.bin", firefoxPath)

 

(4)Cookies

1)设置Cookies

 

public void setCookies(WebDriver,webDriver,Map<String, String> cookies) {
	if (cookies != null && cookies.size() > 0) {
		for (Entry<String, String> c : cookies.entrySet()) {
			Cookie cookie = new Cookie(c.getKey(), c.getValue());
			webDriver.manage().addCookie(cookie);

			System.out.println("Set Cookies : " + c.getKey() + " | " + c.getValue());
		}
	}
}

 

2)获取响应Cookies

 

public Map<String,String> getCookies(WebDriver webDriver){
	Set<Cookie> cookies = webDriver.manage().getCookies();
	Map<String, String> responseCookies = new HashMap<String,String>();
	for (Cookie c : cookies) {
		responseCookies.put(c.getName(), c.getValue());
	}
	
	return responseCookies;
}

 

3)清理Cookies

 

/**
 * 清除所有cookie
 */
public void clearCookies(WebDriver webDriver) {
	webDriver.manage().deleteAllCookies();
}

 

(5)驱动JS

Selenium 的Dom对不可见的Element(html有但是CSS属性为不显示等)找不到,这时候使用JS操作和提交是个不错的选择:

 

public void doWeb(WebDriver webDriver) {
	StringBuilder js = new StringBuilder();
	js.append("document.getElementsByName('username')[1].value='").append(WeiboAccount.USERNAME)
			.append("';");
	js.append("document.getElementsByName('password')[1].value='").append(WeiboAccount.PASSWORD)
			.append("';");
	js.append("document.getElementsByClassName('W_btn_g')[1].click();");
	((JavascriptExecutor) webDriver).executeScript(js.toString());

	(new WebDriverWait(webDriver, 100)).until(new ExpectedCondition<Boolean>() {
		public Boolean apply(WebDriver d) {
			return d.getTitle().indexOf("我的首页") != -1;
		}
	});
}

 

 

分享到:
评论

相关推荐

    selenium-2.41.0.tar.gz

    《Selenium 2.41.0:Python 依赖包详解》 Selenium 是一个强大的自动化测试工具,尤其在Web应用程序的测试领域中备受推崇。Selenium 2.41.0 版本是该系列的一个重要里程碑,它为Python开发者提供了一套全面的API,...

    selenium-java-2.41.0

    "selenium-java-2.41.0" 版本是Selenium针对Java的一个特定版本,发布于2014年,提供了丰富的功能和改进。 在这个版本中,Selenium WebDriver 是核心组件,它允许通过Java代码控制浏览器的行为,进行模拟用户交互,...

    selenium-dotnet-2.41.0

    【Selenium-dotnet-2.41.0】是一个针对.NET Framework开发的自动化测试工具,主要功能是模拟用户在Web浏览器中的操作,用于网站的功能测试和验收测试。这个版本是Selenium对.NET平台的支持,特别适合.NET开发者进行...

    Selenium+PhantomJS+python获取html动态生成的数据

    本话题主要关注如何利用Selenium结合PhantomJS通过Python来获取HTML动态生成的数据。 Selenium是一个开源的Web应用程序测试框架,它允许开发者模拟真实用户对浏览器的操作,包括点击、输入、滚动等,非常适合测试...

    Python Selenium 获取动态网页指定元素的超链接.pdf

    在使用Selenium获取动态网页指定元素的超链接时,我们首先需要对Python有基本的了解。Python是一种多用途的编程语言,具有解释性、编译性、交互性和面向对象的特点。它适合编写各种规模的项目,从简单的脚本到复杂的...

    SELENIUM获取网址.py

    SELENIUM获取网址.pySELENIUM获取网址.pySELENIUM获取网址.pySELENIUM获取网址.py

    selenium.jar selenium资源包

    **Web元素操作**:Selenium支持对页面元素的各种操作,如click()(点击)、sendKeys()(输入文本)、submit()(提交表单)、clear()(清除输入)等,以及获取元素属性、状态的方法。 **等待策略**:在自动化测试中...

    selenium-java-2.41.0,selenium-java-2.33

    在本主题中,我们将深入探讨`selenium-java-2.41.0`和`selenium-java-2.33.0`这两个版本。 首先,`selenium-java-2.33.0.zip`和`selenium-java-2.41.0.zip`是两个不同版本的Selenium Java绑定包。这些zip文件包含了...

    Selenium 模拟浏览器动态加载页面的实现方法.pdf

    通过以上步骤,Selenium可以帮助我们有效地处理动态加载的页面,获取完整的页面数据。在实际应用中,可能还需要结合其他技巧,如设置User-Agent、处理验证码、模拟登录等,以适应各种复杂的网页抓取需求。记住,始终...

    selenium + python 获取table数据的示例讲解

    方法一: 根据table的id属性和table中的某一个元素定位其在table中的位置 table包括表头,位置坐标都是从1开始算 tableId:table的id属性 queryContent:需要确定位置的内容 def get_table_content(tableId,...

    selenium webdriver爬取动态网页

    本主题将深入探讨如何利用Selenium WebDriver这一强大的工具来爬取动态网页,并结合提供的"ieee_paper.py"脚本进行分析。 首先,Selenium是一个自动化测试工具,它能够模拟真实用户在浏览器上的操作。WebDriver是...

    C# 使用Selenium模拟浏览器获取CSDN博客内容

    本篇将深入探讨如何利用C#和Selenium WebDriver模拟浏览器行为,特别是在获取CSDN博客内容方面的应用。 首先,Selenium是一个开源的自动化测试框架,它允许程序员用多种编程语言(包括C#)编写脚本来控制Web浏览器...

    selenium方法获取静态页面数据方法

    selenium方法获取静态页面数据方法 from selenium import webdriver import time opt = webdriver.ChromeOptions() opt.set_headless() driver =webdriver.Chrome(options=opt) while True: print('页数:',page...

    selenium对flex程序的自动化测试.docx

    同时,我们也可以使用 FlexUISelenium 和 FlashSelenium 两个类来获取 Flex 控件的信息,例如获取文本框中的内容,获取按钮的状态等。 通过使用 Selenium 对 Flex 程序进行自动化测试,我们可以提高测试的效率和...

    Python selenium 获取QQ群信息.py

    Python selenium 获取 QQ 群信息,包含QQ号码,群号,群名称,群人数,群规格,并保存为本地 Excel 文件

    selenium IDE最新版本插件资源安装包(免费)

    在本文中,我们将深入探讨Selenium IDE的最新版本资源安装包,以及如何在火狐浏览器上安装和使用这两个版本。 首先,提供的压缩包包含了Selenium IDE的两个不同版本:3.17.4和3.0.2.0。这两个版本都专门为火狐浏览...

    基于selenium实时获取快手直播间礼物python源码+使用说明.zip

    【项目介绍】基于selenium实时获取快手直播间礼物python源码+使用说明.zip基于selenium实时获取快手直播间礼物python源码+使用说明.zip安装相关库``` conda install requests selenium```## 修改直播间地址``` url =...

    Python Selenium获取淘宝订单信息

    通过Selenium获取淘宝订单信息,内容: 一、登录方式:1、通过config.ini配置设置账号密码自动登录 2、通过扫码自动登录 二、数据库存储,可通过config.ini配置sqlserver数据库连接保存

    scrapy结合selenium解析动态页面的实现

    虽然scrapy能够完美且快速的抓取静态页面,但是在现实中,目前绝大多数网站的页面都是动态页面,动态页面中的部分内容是浏览器运行页面中的JavaScript脚本动态生成的,爬取相对困难; 比如你信心满满的写好了一个...

    如何用selenium封装post参数提交示例

    在描述中提到的,我们将探讨如何使用Selenium来封装POST参数并提交,以获取异步请求返回的JSON对象值。 首先,理解Selenium的基本结构是必要的。Selenium通常包含WebDriver接口,它提供了一种方式来控制浏览器,并...

Global site tag (gtag.js) - Google Analytics