Selenium
文章平均质量分 67
mighty13
这个作者很懒,什么都没留下…
展开
-
Selenium3 Python WebDriver API源码探析(20)WebDriver协议概述
WebDriver协议早期Selenium和WebDriver是两个独立的项目,Selenium早期主要依靠将操作转换为JavaScript然后注入浏览器实现浏览器的自动化,WebDriver将浏览器原生API封装成一套更加面向对象的API,但是由于不同浏览器内核的差异,因此为了适配,必须对不同浏览器实现不同的API。在Selenium2之后两个项目合并,我们常说的Selenium其实主要指的就是WebDriver API。当前Selenium稳定版本的主版本为3,beta版本的Selenium4已经在路原创 2021-03-28 00:13:46 · 30665 阅读 · 1 评论 -
Selenium3 Python WebDriver API源码探析(19)加载FireFox用户配置文件
FireFox用户配置文件Firefox 将用户个人信息(例如书签、密码、首选项、扩展、Cookie、证书等)保存在一系列文件中,它们被叫做用户配置文件,它们与 Firefox 的程序文件保存在不同位置。因此,WebDriver如果能够加载已有的FireFox用户配置文件可带来很多便利!查找用户配置文件Firefox默认在本地路径C:\Users\<your Windows login username>\AppData\Roaming\Mozilla\Firefox\Profiles\原创 2021-03-27 00:10:31 · 30555 阅读 · 2 评论 -
Selenium3 Python WebDriver API源码探析(18)FireFox WebDriver实现,安装扩展
根据《Selenium3 Python WebDriver API源码探析(2):Selenium包目录结构、模块功能概述》可知,selenium\webdriver\remote\webdriver.py模块中的WebDriver类定义了通用WebDriver的基本特性,各种浏览器根据自身特性继承WebDriver类再做进一步实现。selenium\webdriver\firefox\webdriver.py模块中的WebDriver类实现了FireFox WebDriver,并通过selenium\we原创 2021-03-26 00:20:02 · 30605 阅读 · 1 评论 -
Selenium3 Python WebDriver API源码探析(17)下拉框(select)支持
概述Selenium在实现下拉框(select)自动化操作的过程中需要大量代码,因此Selenium专门针对下拉框(select)提供了API,即selenium\webdriver\support\select.py模块中的Select类。Select类的主要元素如下:__init__(self, webelement):构造方法,检测元素是否为下拉框(select),下拉框是否支持多选。options特性:返回下拉框选项列表。all_selected_options特性:返回下拉框已选选项列原创 2021-03-25 00:06:24 · 30478 阅读 · 2 评论 -
Selenium3 Python WebDriver API源码探析(16)颜色转换
在使用Selenium过程中,难免需要对颜色进行比较,那么所有颜色类型必须要进行规范化。selenium\webdriver\support\color.py模块实现了颜色转换。color模块原理color模块主要元素为:Colors模块变量:定义了HTML4 颜色字符串对应的Color对象。颜色匹配正则表达式模块变量:定义了各类颜色格式的匹配正则表达式。Color类:颜色转换支持类,颜色基础模型为RGBA。__init__(self, red, green, blue, alpha=1):原创 2021-03-24 01:04:58 · 30486 阅读 · 1 评论 -
Selenium3 Python WebDriver API源码探析(15)Cookie管理
Cookie是从网站发送并存储在计算机中的一小段数据。 Cookies主要用于识别用户并加载存储的信息。WebDriver API提供了一系列与Cookie进行交互的内置方法。selenium\webdriver\remote\webdriver.py中的WebDriver类实现了相关方法。Cookie相关API添加CookieSelenium用于添加Cookie的方法为add_cookie(cookie_dict),cookie_dict参数的格式为一组已定义的可序列化JSON对象(字典),具体取值原创 2021-03-23 00:30:48 · 30456 阅读 · 1 评论 -
Selenium3 Python WebDriver API源码探析(14)页面加载策略pageLoadStrategy(FireFox)
Web页面属性document.readyState描述当前页面的加载状态,该属性有三个值:loading(正在加载)、interactive(可交互)、complete(完成)。默认情况下,在document.readyState为COMPLETE之前,WebDriver都将延迟driver.get()的响应或 driver.navigate().to()的调用。在单页应用程序中(例如Angular、React、Ember),一旦动态内容加载完毕(即pageLoadStrategy状态为COMPLET原创 2021-03-22 22:25:34 · 30732 阅读 · 1 评论 -
Selenium3 Python WebDriver API源码探析(13)FireFox设置代理
数据采集过程中经常需要用到代理,Selenium也支持代理功能,selenium\webdriver\common\proxy.py提供了代理数据结构的实现。Selenium实现代理的方法有很多种,不同WebDriver实现实现代理的方法也不尽相同。由于经常使用FireFox浏览器,因此,以geckodriver作为案例来演示代理功能。官方文档推荐使用Capabilities根据《Selenium3 Python WebDriver API源码探析(11)WebDriver Capabilities(驱原创 2021-03-21 00:30:02 · 30615 阅读 · 2 评论 -
Selenium3 Python WebDriver API源码探析(12)FireFox自定义功能(FirefoxOptions)的实现:Options类
FireFox自定义功能的相关实现根据《Selenium3 Python WebDriver API源码探析(11)WebDriver Capabilities(驱动功能)概述,FirefoxOptions》可知,WebDriver实现通过Capabilities定义新会话启动时的各种特性,也可以返回会话的特性集。Capabilities分为两类,一类是标准Capabilities,一类是各WebDriver实现的特定Capabilities。对于FireFox WebDriver 即geckodrive原创 2021-03-20 12:47:55 · 33080 阅读 · 2 评论 -
Selenium3 Python WebDriver API源码探析(11)WebDriver Capabilities(驱动功能)概述,FirefoxOptions
Selenium通过WebDriver操控浏览器,WebDriver不单是远程控制接口,也是W3C的推荐标准详见https://www.w3.org/TR/webdriver/。Capabilities(功能)是WebDriver支持的标准命令之外的扩展命令,用于控制端与浏览器端之间对一些特性进行通讯,控制端可以使用Capabilities定义浏览器端创建新会话时需要满足的一些特性。浏览器端也可以用Capabilities描述会话所支持的特性集。WebDriver支持的Capabilities分为两类,原创 2021-03-19 00:27:28 · 30724 阅读 · 0 评论 -
Selenium3 Python WebDriver API源码探析(10):动作链(ActionChains):鼠标事件和键盘事件
鼠标、键盘事件是我们利用Selenium操控浏览器的重要交互手段,主要由selenium\webdriver\common\action_chains.py中的ActionChains类实现。该类通过webdriver包对外暴露,即可使用from selenium.webdriver import ActionChains导入ActionChains类。...原创 2021-03-18 08:31:18 · 30928 阅读 · 0 评论 -
Selenium3 Python WebDriver API源码探析(9):JavaScript原生警告框(alert)、确认框(confirm)、提示框(prompt)处理
弹窗提示概述Selenium专门提供了用于处理JavaScript原生弹窗提示的API。这些JavaScript原生提示包括警告框(alert)、确认框(confirm)、提示框(prompt),它们由浏览器提供限定的样式。警告框(alert)构成主要包括提示文本和确定按钮。确认框(confirm)构成主要包括提示文本、确定按钮和取消按钮。提示框(prompt)构成主要包括提示文本、输入框、确定按钮和取消按钮。Selenium弹窗提示APISelenium用于处理Java原创 2021-03-17 00:57:27 · 30735 阅读 · 0 评论 -
Selenium3 Python WebDriver API源码探析(8):等待(显式等待、隐式等待)、超时(页面加载超时、异步脚本调用超时)
等待概述使用Selenium操控浏览器时,等待非常重要,因为浏览器进行渲染、执行交互都是非常耗费时间的,另外由于网络等因素,经常出现我们需要操纵的DOM元素未就绪的情况,此时经常抛出NoSuchElementException异常。为了解决这一问题有两种处理策略:被动等待。执行完一个比较耗时的操作后,使用time.sleep()等待一段时间,然后再继续执行。这种策略的问题在于不够灵活,等待时间无法预测,时间过长浪费时间,时间过短仍然可能导致异常。主动检测。不断轮询元素是否就绪。这样程序稍微复杂一些原创 2021-03-16 00:18:10 · 30639 阅读 · 1 评论 -
Selenium3 Python WebDriver API源码探析(7):同步/异步执行JavaScript(execute_script,execute_async_script:参数,返回值)
概述Selenium虽然内置了很多与浏览器交互的方法,但是有一些方面还是不能完全覆盖,因此执行JavaScript是非常有必要的,这也是模拟浏览器包必备的功能。需要执行JavaScript的主要场景如下:修改元素的属性,如显示隐藏元素执行特定动作,如拖动滚动条表单操作,如向文本框输入内容获取某些Selenium未提供接口的DOM属性注入其他工具库,比如jQueryexecute_script方法Selenium中执行JavaScript主要依靠WebDriver的execute_scr原创 2021-03-15 00:08:55 · 31456 阅读 · 2 评论 -
Selenium3 Python WebDriver API源码探析(6):窗口(标签)管理(切换、关闭)
WebDriver 不区分窗口和标签页。如果打开了一个新窗口(标签),可以使用窗口句柄(handle)来处理它。 每个窗口都有一个唯一的标识符,该标识符在单个会话中保持持久性。获取当前窗口句柄作用:获取当前窗口句柄签名:driver.current_window_handle调用对象:WebDriver实例值类型:字符串获取浏览器窗口句柄集合作用:获取当前浏览器的窗口句柄集合签名:driver.window_handles调用对象:WebDriver实例值类型:字符串列表打开并切换新窗原创 2021-03-14 00:45:48 · 30641 阅读 · 0 评论 -
Selenium3 Python WebDriver API源码探析(5):浏览器导航、页面基本信息(URL、标题、HTML)、窗口大小位置管理
Selenium对于浏览器的操控主要通过selenium\webdriver\remote\webdriver.py中WebDriver类的相关方法和特性(property)实现。首先,创建WebDriver实例from selenium import webdriverdriver = webdriver.Firefox()浏览器导航打开页面作用:根据url打开页面签名:driver.get("http://www.baidu.com")get方法源码:def get(self, u原创 2021-03-13 00:55:39 · 30492 阅读 · 0 评论 -
Selenium3 Python WebDriver API源码探析(4):Web元素的属性和方法
Selenium中网页中DOM元素的实现为selenium\webdriver\remote\webelement.py中的WebElement类。WebDriver API中定位元素的方法在《Selenium3 Python WebDriver API源码探析(3):定位元素》已经简单介绍。本文主要介绍网页元素的属性和方法。属性或特性元素的标签名称作用:获得当前元素的标签名称签名:el.tag_name返回值:字符串,例如'input'元素的文本作用:获得当前元素的文本内容签名:el.t原创 2021-03-12 00:30:34 · 30504 阅读 · 0 评论 -
Selenium3 Python WebDriver API源码探析(3):定位Web元素
定位元素是任何与Web进行交互操作的基础,JavaScript如是,对于Selenium亦如是。只有定位到了元素,才能对元素进行操作。Selenium中的两个基础元素定位方法(find_element与 find_elements)在Selenium中使用find_element与 find_elements方法即可完成元素的定位。我们先简单对比下这两个方法,再讲相关的细节:find_element :函数签名:def find_element(self, by=By.ID, value=No原创 2021-03-11 02:32:04 · 30549 阅读 · 0 评论 -
Selenium3 Python WebDriver API源码探析(2):Selenium包目录结构、模块功能概述
Selenium 包结构概述Selenium 包结构如下:selenium├─common└─webdriver ├─android ├─blackberry ├─chrome ├─common │ ├─actions │ └─html5 ├─edge ├─firefox ├─ie ├─opera ├─phantomjs ├─remote ├─safari ├─support原创 2021-03-10 01:50:42 · 30558 阅读 · 1 评论 -
Selenium3 Python WebDriver API源码探析(1):Selenium基本概念、环境部署
Selenium 简介Selenium 是支持 Web 浏览器自动化的一系列工具和库的集合。Selenium 是开源项目。目前最新版本为Selenium 3。Selenium 支持多平台,如:Linux、Windows和mac OS。Selenium 支持多种编程语言,如:Java、Python、C#、Ruby、JavaScript、KotlinSelenium 支持多种浏览器,如:IE、Firefox、Google Chrome、Edge、Safari、Opera等Selenium项目主要包括以原创 2021-03-09 00:30:15 · 30485 阅读 · 0 评论 -
Selenium如何隐藏Firefox geckodriver的window.navigator.webdriver属性(Firefox88.0已失效)
在当前全民爬虫的形势下,Selenium已经成为爬虫必备技能,自然Selenium也成为反爬必备的检测项目,常见识别Selenium的方法主要通过检测浏览器的window.navigator.webdriver属性。下面我们看下不同浏览器的window.navigator.webdriver属性值。正常Firefox浏览器Selenium+geckodriver代码:from selenium import webdriveroptions = webdriver.FirefoxOption原创 2021-02-03 00:27:04 · 31946 阅读 · 4 评论 -
selenium设置火狐浏览器为headless(无头模式)
selenium已经停止了对PhantomJS的支持,只能调用Firefox或者Chrome浏览的无头模式(即没有浏览器界面)。使用步骤:安装Firefox浏览器firefox历年版本安装包的官方镜像地址:https://download-installer.cdn.mozilla.net/pub/firefox/releases/安装geckodriver驱动(1)下载geckodriver火狐所有的geckodriver.exe驱动大全下载链接如下:https://github.com/原创 2020-12-04 12:58:47 · 22475 阅读 · 4 评论 -
Selenium在添加cookie时“Can only set Cookies for the current domain”错误处理
在用selenium添加cookie时遇到了“Can only set Cookies for the current domain”错误,经过一番搜索验证。 问题原因大概如下:某些网页里面用了一些selenium不支持的cookie键。 问题解决:通过try/except忽略这种错误继续执行就OK了,不影响正常功能。原创 2017-10-05 22:41:08 · 26664 阅读 · 2 评论 -
selenium、python模拟登陆淘宝
#coding=utf-8import timeimport datetimeimport sysimport osimport randomimport loggingfrom selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.u原创 2017-09-19 21:56:42 · 33186 阅读 · 0 评论 -
Selenium操作CNKI(中国知网)网站的远见搜索
最近想对单位发表的期刊情况做一个文献计量学分析,数据倒也不多,但是手动保存优点麻烦。两年前用spynner.py做过抓取CNKI管理后台,spynner基本弃坑了,一直没再动过。CNKI网站为了反爬,做的太复杂,平时自己访问都感觉慢,一看源代码,加载了一堆js,能不慢吗?Python2,selenium操作如下(仅关键部分,代码不全):# coding: utf-8import timeimpor原创 2017-09-17 23:48:22 · 27518 阅读 · 0 评论 -
Selenium+phantomJS+Python 操作cookie实现自动登录(以音悦台为例)
每天都在音悦台(yinyuetai)听歌,原来看订阅歌手更新的MV必须登陆,而且原来每次登陆都需要用geetest的滑动验证码,懒得对验证码再多做工作。进来发现登陆不用每次输入验证码就动了利用cookie自动登录的念头思路登录,获取cookie找到登录框界面,音悦台的登录框是动态生成的,需要先点击下登录tab,然后才会加载登录框DIV,由于音悦台页面加载比较慢,因此可能需要等待一定时间等待元素加载原创 2017-10-06 23:57:25 · 24727 阅读 · 0 评论 -
Selenium phantomjs与spynner等待网页加载完成方式总结
利用无头浏览器对网页元素进行模拟操作时经常遇到的问题就是**元素不存在这样的错误。原因大概有这么几种。 1. 网页没有加载完成,因此定位不到元素 2. 网页元素显示样式设置为不可见,即display:none,常见的如一些悬停显示的菜单。 3. 元素在iframe 中,常见的情况比如腾讯网站的登录框。 一般来讲,在网页源代码中能够看到的且display属性设置为可见的元素,selenium等原创 2017-10-07 23:56:05 · 29475 阅读 · 0 评论 -
Selenium 与 Spynner 切换frame(iframe)方法对比
在模拟操作网页过程中经常会遇到框架网页或者有iframe的网页,处理不当的话就会定位不到元素,很是让人头痛。 之前遇到典型的例子就是腾讯的登录框,很多都是用iframe加载的,只要能够定位到iframe,定位对应的元素非常简单。 在主要用selenium之前用spynner比较多,spynner的优势在于可以直接看操作过程,劣势在于用户少、文档简单、坑比较多。spynner在spynner中,关原创 2017-10-08 00:57:24 · 23453 阅读 · 0 评论 -
Selenium模拟操作中按钮点击(click)失效问题和文本框输入内容失败问题
在使用selenium模拟操作时经常遇到一些使用原始方法解决不了的问题。click失效曾经多次遇到元素click()失败的情况,经典的例子就是某网站的登录框。一般遇到click失败时我的一般处理方法是改用send_keys(Keys.ENTER),直接用发回车键,简单粗暴。但是某网站的登录框,直接定位按钮元素click无效,发送回车键也无效,分析应该是焦点问题,但是试了多种方法也不成。经过实验,当焦原创 2017-10-08 23:12:13 · 39094 阅读 · 2 评论 -
Selenium操作中文时UnicodeDecodeError: 'utf8' codec can't decode 错误
使用Python及selenium操作网页,出现中文时,比如填写表单element.send_keys('中国')可能会出现UnicodeDecodeError: ‘utf8’ codec can’t decode错误解决方法如下:'中国'.decode('gb18030')原创 2017-09-17 23:36:52 · 25605 阅读 · 0 评论