HTML页面规定了id属性在HTML文档中必须是唯一的(页面id不唯一时,在编辑器中会标红显示,但是页面依然能正常加载)。id定位方法就是通过元素的id属性来查找元素,比如通过id定位百度输入框:
Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素才能进行后续的自动化控制,我在这里将对各种元素定位方式进行总结归纳一下。
webDriver是按照client/server模式设计,client就是我们的测试代码,发送请求,server就是打开的浏览器来打开client发出的请求并做出响应。
第一种:selenium导入浏览器驱动,用get方法打开浏览器,例如: import time from selenium import webdriver def mac(): driver = webdriver.Firefox() driver.implicitly_wait(5) driver.get("http://huazhu.gag.com/mis/main.do") 第二种:通过导入python的标准库webbrowser打开浏览器,例如: >>> import webbrowser >>> webbrowser.open("C:\\Program Files\\Internet Explorer\\iexplore.exe") True >>> webbrowser.open("C:\\Program Files\\Internet Explorer\\iexplore.exe") True 第三种:使用Splinter模块模块 一、Splinter的安装 Splinter的使用必修依靠Cython、lxml、selenium这三个软件。所以,安装前请提前安装 Cython、lxml、selenium。以下给出链接地址: 1)http://download.csdn.net/detail/feisan/4301293 2)http://code.google.com/p/pythonxy/wiki/AdditionalPlugins#Installation_no 3)http://pypi.python.org/pypi/selenium/2.25.0#downloads 4)http://splinter.cobrateam.info/ 二、Splinter的使用 这里,我给出自动登录126邮箱的案例。难点是要找到页面的账户、密码、登录的页面元素,这里需要查看126邮箱登录页面的源码,才能找到相关控件的id. 例如:输入密码,密码的文本控件id是pwdInput.可以使用browser.find_by_id()方法定位到密码的文本框, 接着使用fill()方法,填写密码。至于模拟点击按钮,也是要先找到按钮控件的id,然后使用click()方法。 #coding=utf-8 import time from splinter import Browser def splinter(url): browser = Browser() #login 126 email websize browser.visit(url) #wait web element loading time.sleep(5) #fill in account and password browser.find_by_id('idInput').fill('xxxxxx') browser.find_by_id('pwdInput').fill('xxxxx') #click the button of login browser.find_by_id('loginBtn').click() time.sleep(8) #close the window of brower browser.quit() if __name__ == '__main__': websize3 ='http://www.126.com' splinter(websize3) WebDriver简介 selenium从2.0开始集成了webdriver的API,提供了更简单,更简洁的编程接口。selenium webdriver的目标是提供一个设计良好的面向对象的API,提供了更好的支持进行web-app测试。从这篇博客开始,将学习使用如何使用python调用webdriver框架对浏览器进行一系列的操作 打开浏览器 在selenium+python自动化测试(一)–环境搭建中,运行了一个测试脚本,脚本内容如下: from selenium import webdriver import time driver = webdriver.Chrome() driver.get("http://www.baidu.com") print(driver.title) driver.find_element_by_id("kw").send_keys("s
2.根据class name ---->find_element_by_name()
Selenium是一个常用的自动化测试工具,可用于模拟用户操作浏览器。在Web开发和爬虫中,经常需要从网页中获取链接地址(href),而Selenium提供了各种方式来实现这个目标。 在本篇文章中,我将主要讲解使用Selenium的find_element_by_xpath方法来获取网页中的href属性值。
我们模拟登陆用的是selenium库,selenium是一个自动化测试工具,在爬虫中通常用来进行模拟登陆。
浏览器操作 # coding: utf-8 from selenium import webdriver from time import sleep driver = webdriver.Firefox() driver.get("https://www.baidu.com") # 设置浏览器宽800,高400 driver.set_window_size(800, 400) sleep(3) # 最大化窗口 driver.maximize_window() driver.get("https
1.跳转到Frame/Iframe ,再定位元素 理解:frame的实质,frame中实际上是嵌入了另一个页面,而webdriver每次只能在一个页面识别,因此需要先定位到相应的frame,对那个页面里的元素进行定位
在开始登录前,咱们得先学习一下selenium定位元素的方法,不然找不到元素是没办法完成自动操作
find_element_by_id() find_element_by_name() find_element_by_class_name() find_element_by_tag_name() find_element_by_link_text() find_element_by_partial_link_text() find_element_by_xpath() find_element_by_css_selector() 在这里将对各种元素定位方式统一使用百度首页进行示例,详细操作步骤有以下内容: 1.打开浏览器,进入百度首页(www.baidu.com); 2.百度页面输入关键字 www.testclass.cn 进行搜索; 3.关闭浏览器; 首先,通过前端工具(火狐浏览器的Firebug)或者直接按F12进入开发者模式查看具体前端代码:
a. 其中 '//' 表示从匹配的节点开始找,也就是相对路径,这也是用的最多的一种情况. b. [@class='class_name'] 表示元素的属性值,在这里表示元素的class 属性的值为 class_name. 如果是多个属性进行限制,那么可以追加多个 [@attribute_name='attribute_value']来限制,从而保证可以匹配到相应的元素 c. 支持多层路径,上面路径基础上可以追加,比如: "//div[@class='class_name']/button[@type='submit']" , 如果是查找 节点元素,那么后面用类似: "//div[@class='class_name']/.." 的格式,这种情况在实际使用中会常遇到. d. input, button 等元素不支持class 属性,这个原因不清楚,但是使用的时候加上class 属性就找不到元素. div等元素支持class 属性,如果通过特定属性找不到,尝试更改属性的值来进行查找 e. 如果是使用xpath, 并通过使用text 属性来进行元素查找,那么表达式格式如下:
1.driver.current_url:用于获得当前页面的URL 2.driver.title:用于获取当前页面的标题 3.driver.page_source:用于获取页面html源代码 4.driver.current_window_handle:用于获取当前窗口句柄 5.driver.window_handles:用于获取所有窗口句柄 6.driver.find_element_by***** 定位元素,有18种 7.driver.get(url):浏览器加载url。 8.driver.forward():浏览器向前(点击向前按钮)。 9.driver.back():浏览器向后(点击向后按钮)。 10.driver.refresh():浏览器刷新(点击刷新按钮)。 11driver.close():关闭当前窗口,或最后打开的窗口。 12.driver.quit():关闭所有关联窗口,并且安全关闭session。 13.driver.maximize_window():最大化浏览器窗口。 14.driver.set_window_size(宽,高):设置浏览器窗口大小。 15.driver.get_window_size():获取当前窗口的长和宽。 16.driver.get_window_position():获取当前窗口坐标。 17.driver.get_screenshot_as_file(filename):截取当前窗口。 18.driver.implicitly_wait(秒):隐式等待,通过一定的时长等待页面上某一元素加载完成。若提前定位到元素,则继续执行。若超过时间未加载出,则抛出NoSuchElementException异常。 19.driver.switch_to_frame(id或name属性值):切换到新表单(同一窗口)。若无id或属性值,可先通过xpath定位到iframe,再将值传给switch_to_frame() driver.switch_to.frame(id或name,或定位到的frame) 20.driver.switch_to.parent_content():跳出当前一级表单。该方法默认对应于离它最近的switch_to.frame()方法。 21.driver.switch_to.default_content():跳回最外层的页面。 22.driver.switch_to_window(窗口句柄):切换到新窗口。 23.driver.switch_to.window(窗口句柄):切换到新窗口。 24.driver.switch_to_alert():警告框处理。处理JavaScript所生成的alert,confirm,prompt. 25.driver.switch_to.alert():警告框处理。 26.driver.execute_script(js):调用js。 27.driver.get_cookies():获取当前会话所有cookie信息。 28.driver.get_cookie(cookie_name):返回字典的key为“cookie_name”的cookie信息。 29.driver.add_cookie(cookie_dict):添加cookie。“cookie_dict”指字典对象,必须有name和value值。 30.driver.delete_cookie(name,optionsString):删除cookie信息。 31.driver.delete_all_cookies():删除所有cookie信息。
俗话说:磨刀不误砍柴工,因此在我们要开始写自动化脚本之前,我们先来学习和了解几个基本概念,在完全掌握了这几个概念之后,有助于我们快速上手,如何去编写自动化测试脚本。
在自动化的测试中,对象元素的定位和操作是自动化的核心部分,但是对象是定位是自动化的基础,在对象的基础上,才可以形成对对象的操作。
find_element_by_xpath("//input[@id='input']") #@后跟属性,可以是任何属性语法://标签名[@属性名=属性值]1、使用标签名+节点属性定位
读了虫师《Selenium 2自动化测试实战 基于Python语言》一书,感触颇深,内容非常丰富。现整理下来,供后续学习参考使用。本次主要整理的是元素定位的方式。
您可能需要在多种情况下针对不同的浏览器(例如Firefox,Chrome,Internet Explorer,Edge)测试代码。跨不同浏览器测试网站的做法称为自动浏览器测试。要使用Selenium自动化测试执行自动浏览器测试,您应该在单元测试代码或pytest代码中合并对这些浏览器的选择性处理。下面显示了一个代码片段(利用pytest)来处理多个浏览器:
前言 江湖传言,武林中流传八种定位,其中xpath是宝刀屠龙,css是倚天剑。 除了这八种,其实还有十种定位方法,眼看就快失传了,今天小编让失传已久的定位方法重出江湖! 一、十八种定位方法 前八种是大家都熟悉的,经常会用到的 1.id定位:find_element_by_id(self, id_) 2.name定位:find_element_by_name(self, name) 3.class定位:find_element_by_class_name(self, name) 4.tag定位:find_el
上一篇中,只是简单地一带而过的说了一些驱动浏览器,这一篇继续说说驱动浏览器,然后再说一说元素定位的方法。
一、selenium元素定位 🐱🏍🐱👤🐱👓🏍🐱🚀总结一下元素定位方式,因为项目中会用到,爬虫也会用到,也是为了方便自己和方便后续的同事,总结一下。😄🤞😊😘 1.id定位 from selenium import webdriver from selenium.webdriver.common.by import By # 单个查找 find_element_by_id(locator) find_element(By.ID, locator) # 多个查找 find_elements_by_
selenium提供了内置的方法完成对待操作元素的定位,主要分为8类,其中,每类又可细分为定位单个元素和定位多个元素,另外还提供了2个私有方法。详细如下:
最近研究了一下python和selenium 这两个东西, 大部分的自动化测试都是用这两个. 完美模拟浏览器操作
3)我电脑上用的IE11,IEDriverServer.exe的路径就是我电脑上的实际路径,要根据自己的实际情况修改,我的系统环境变量PATH中添加了C:\ProgramData\Anaconda3\。
注意:用 xpath时,如果有多个元素匹配了 xpath,它只会返回第一个匹配的元素。如果没有找到,那么会抛出 NoSuchElementException 的异常
element = driver.find_elements_by_*("*") * 可以是name,tag_name,
新建实例driver = webdriver.Chrome() 1.通过标签属性Id查找元素 方法:find_element_by_id(element_id) 实例:driver.find_element_by_id(“iptUsername”) 2.通过标签属性name查找元素 方法:find_element_by_name(element_name) 实例:driver.find_element_by_name(“inputPwname”) 3.通过标签Xpath路径查找元素 方法:find_element_by_xpath(xpath) 实例:driver.find_element_by_xpath(“//div[@id=’menuContainer’]/div/div/ul/li[4]/a”) 4.通过标签名tagname查找元素 方法:find_element_by_tag_name(tag_name) 实例:driver.find_element_by_tag_name(“input”) 注意:通过tag_name查找时使用find_element_by_tag_name查找到的是第一个标签的tag_name 5.通过标签中的元素文本链接查找元素 方法:find_element_by_link_text(link_text) 实例:driver.find_element_by_link_text(‘登 录’) 6.通过标签的class属性查找元素 方法:find_elements_by_class_name(class_name) 实例:driver.find_elements_by_class_name(“x-panel-body”) 7.通过css样式查找元素 方法:find_element_by_css_selector() 实例:driver.find_element_by_css_selector(“input.btn”) 温馨提示:find_elements_by_css_selector()查询到的是一个集合,如果id名字重复的时候可以采取find_elements_by_id(),其他的查询方式同理; 8.浏览器中加载url 方法:get(url) 实例:driver.get(“http//:www.baidu.com”) 9.向前 方法:forward() 实例:driver.forward() 10.返回当前会话中的cookies 方法:get_cookies() 实例:driver.get_cookies() 11.根据cookie name 查找 方法:driver.get_cookie(cookie_name) 实例:driver.get_cookie(“NET_SessionId”) 12.截取当前页面 方法:get_screenshot_as_file(filename) 实例:driver.get_screenshot_as_file(“D:\Program Files\Python27\NM.bmp”) 13.获取当前窗口的坐标 方法:get_window_position() 实例:driver.get_window_position() 14.获取当前窗口的长和宽 方法:get_window_size() 实例:driver.get_window_size()
最近在学习web自动化测试,web自动化测试中元素定位是基本功也是很重要的一环,常用的元素定位方式网上都有很多的,一般采用强大的xpath方式来定位,xpath中又包含了很多其他方法。当然,在学习元素定位之前,需要要对前端要有一定的了解,比如HTML,CSS
selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题
本文通过分析网络爬虫技术的实现,探讨了如何从网络中爬取所需信息。通过使用Python的BeautifulSoup和Selenium库,可以爬取网站的内容。同时,文章还讨论了如何爬取动态加载的内容和网站,并分析了爬取效率的问题。最后,作者分享了自己在爬虫实践中的经验和教训,并指出了爬虫技术的优缺点。
**(1)CSS选择器** 需要先创建一个parsel.Selector对象 from parsel import Selector html 可以是请求某个网页的源码,也可以是html,xml格式的字符串 selector = Selector(html) 创建Selector对象之后就可以开始使用了 tags = selector.css(’.content’) 我们平时使用的css中,对某一个标签进行修饰时,使用的是 .class_attr 在这里也是如此 .content 就是指查询所有 class 为 content 的标签 查询的结果是一个特殊的对象,不能直接得到需要的数据 将css()函数查询到的结果转换为字符串或者列表,需要使用一个函数 • get() • getall()
本文主要讲解selenium的安装和基础使用,然后利用selenium爬取拉勾网最新的职位信息。
一 介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器 from selenium import webdriver browser=webdriver.Chrome() browser=webdriver.Firefox() browser=webdriver.PhantomJS() b
2. current_context current_context(self):
网站复杂度增加,爬虫编写的方式也会随着增加。使用Selenium 可以通过简单的方式抓取复杂的网站页面,得到想要的信息。
Selenium是一款用于测试Web应用程序的经典工具,它直接运行在浏览器中,仿佛真正的用户在操作浏览器一样,主要用于网站自动化测试、网站模拟登陆、自动操作键盘和鼠标、测试浏览器兼容性、测试网站功能等,同时也可以用来制作简易的网络爬虫。
driver.find_element_by_xpath("").get_attribute(属性名称)
打开问价夹下面的uiautomatorviewer: 夜神模拟器里的App后,回到uiautomatorviewer: 点击左上角的Device Screenshot,这时你的夜神模拟器页面就
bilibili 2019年拜年祭的《千里之外》很好看,于是我想用《python爬虫开发与入门实战》第七章的爬虫技术抓取一下评论。打开页面观察源码和network发现是用ajax异步加载的,直接访问打不开,需要伪造headers,有些麻烦。(实际上伪造非常简单,但是从json串里提取结果很麻烦,远没有直接从网页的xpath提取简单,见 ajax_get_comment方法。其中 CrawlerUtility来自https://github.com/kingname/CrawlerUtility,感谢青南的小工具,解析headers方便多了。)
现在开始要学习使用Python进行动态爬虫了,而Selenium是来进行动态爬虫的一种工具
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器)。
在 1.UI自动化测试框架搭建-yaml文件管理定位元素 中已经可以拿到元素了,后面就需要对元素进行操作。所有操作最基础的就是要先找到元素
最近斗哥在朋友的影响下,接触了自动化测试工具中的一个项目:appium自动化测试脚本。
前几日,在虎牙关注了个主播,领了一个一级狗牌。 然后发现虎牙会每天给粉丝送10个虎粮的免费礼物,不用就过期了。 赠送礼物会增加亲密度,给狗牌升级。 而7天没有亲密度增长的话,亲密度还会掉。 我就在想,不如写一个脚本,每天自动赠送免费礼物给关注的主播。 不用自己管,亲密度也往上涨不是美滋滋
这里简单解释一下什么是Selenium,它其实是一个网站前端压力测试框架,更通俗的说,它能直接操作浏览器,试想一下,网页是在浏览器里面加载的,如果我们能用代码操控浏览器,那我们想要爬取什么数据不能通过浏览器获取?无所不爬!
最近整理一个爬虫系列方面的文章,不管大家的基础如何,我从头开始整一个爬虫系列方面的文章,让大家循序渐进的学习爬虫,小白也没有学习障碍.
领取专属 10元无门槛券
手把手带您无忧上云