selen

阅读 / 问答 / 标签

使用Selenium控制已经打开的浏览器

有时候网站需要扫码登录或者验证码登录,使用selenium启动的浏览器进程登录较为麻烦。需要手动辅助登录,再进行selenium自动化。 找到本机chrome.exe的位置 通过命令行启动ChromeDebug模式 Python版(未试验) Java版 (已试验) Reference: [1] Selenium 控制已经打开的浏览器 (Chrome & Java版) 及 Chrome配置 [2] 使用selenium接管已打开的浏览器

关于Python的Selenium框架全解,一篇完整的说明书

目录 安装 selenium 第三方库 下载浏览器驱动: 需要把这些浏览器驱动放入 Python 应用目录里面的 Script 文件夹里面 ① 200 多本 Python 电子书(和经典的书籍)应该有 ② Python标准库资料(最全中文版) ③ 项目源码(四五十个有趣且可靠的练手项目及源码) ④ Python基础入门、爬虫、网络开发、大数据分析方面的视频(适合小白学习) ⑤ Python学习路线图(告别不入流的学习) 私信我01即可获取大量Python学习资源 每次当selenium启动chrome浏览器的时候,chrome浏览器很干净,没有插件、没有收藏、没有 历史 记录,这是因为selenium在启动chrome时为了保证最快的运行效率,启动了一个裸浏览器,这就是为什么需要配置参数的原因,但是有些时候我们需要的不仅是一个裸浏览器 selenium启动配置参数接收是ChromeOptions类,创建方式如下 : 创建了ChromeOptions类之后就是添加参数,添加参数有几个特定的方法,分别对应添加不同类型的配置项目 常用配置参数: 其他配置项目参数 制作无头浏览器 规避检测 门户网站检测如果是selenium请求的,有可能会拒绝访问。这也是一种反爬机制 实现规避检测 注意:这里只能使用 options 添加 如果有其他的模块要添加,注意要分开添加 元素定位语法 常用语法: 在 element 变成 elements 时,返回符合条件的所有元素组成的数组 控制浏览器大小 浏览器后退,前进 刷新 在搜索框模拟回车操作 在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供 ActionChains 类提供了鼠标操作的常用方法: 语法: 想使用selenium中的键盘事件,首先我们必须导入Keys包,需要注意的是包名称Keys首字母需要大写。Keys类中提供了几乎所有的键盘事件包括组合按键如 Ctrl+A、 Ctrl+C 等 使用语法: 其他事件可以通过查看源码获取 显式等待使WebdDriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常 实例: WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常 语法: 参数: 如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。 默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期 案例 语法: alert 里面的方法 WebDriver操作cookie的方法: 参考链接: https://www.jianshu.com/p/773c58406bdb 与普通的在headers里添加 {"Cookies":" "} 不一样的是,此方法需要按照cookie的name,value,path,domain格式逐个cookie添加 通过execute_script()方法执行JavaScripts代码来移动滚动条的位置

python菜鸡使用selenium出问题请指教

1.打开默认的chrome在python版的Webdriver中要打开chrome浏览器,需要安装chromedriver.exe。。将这个chromedriver.exe放置在chrome的安装目录下 相对路径为 …GoogleChromeApplication,然后设置path环境变量,把chrome的安装目录地址放入path变量中。我的安装目录是C:Program FilesGoogleChromeApplication,也即是在path变量的最后,加上此目录即可,然后尝试在python中运行from selenium import webdriverdriver = webdriver.Chrome()若不报错,即代表安装成功。2.打开本地的Chromeimport osfrom selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsfrom time import sleepexecutable_path = "C:Program Files (x86)GoogleChromeApplicationchromedriver.exe" //指定chromediver的位置,如果在默认路径,这两行可以省略。os.environ["webdriver.chrome.driver"] = executable_pathoptions = webdriver.ChromeOptions() //定义配置对象options.add_argument("--user-data-dir="+r"C:/Users/cui/AppData/Local/Google/Chrome/User Data/")//指定用户的配置地址,并加载至配置对象中。browser = webdriver.Chrome(executable_path,chrome_options=options)//此处注意,有两个参数,后面那个参数,一定要写成 chrome_options=XX的形式,否则运行报错。备注:chrome的用户配置数据,在c盘的user用户下,可能有些人不能找到此目录,这是因为AppDate文件夹是默认隐藏的,需要进入文件夹选项去设置一下即可。

selenium3 python环境搭建

随着Python3的普及,Selenium3也跟上了行程。而Selenium3最大的变化是去掉了Selenium RC,另外就是Webdriver从各自浏览器中脱离,必须单独下载。1、windows下多个python版本共存(本机已经安装有python2.7.8)可以通过 python 、pip 下载python跟pip本机安装的版本python 2.7.8 与python 3.5下载python后安装,添加环境变量 pathD:PythonPython35-32Scripts;D:PythonPython35-32;D:Python27;D:Python27Scripts;进入D:Python27,将python.exe修改为python2.exe进入D:PythonPython35-32,将python.exe修改为python3.exe将下载的pip 解压,进入解压目录 执行python2 setup.py install/python3 setup.py install通过 pip list 查看pip是否安装成功。python3-pip list2、在python3中安装selenium进入D:PythonPython35-32Scripts 执行pip.exe install seleniumsuccessfully install selenium3、安装selenium服务器在selenium下载地址中下载selenium-server-standalone-x.x.x.jar在执行 java -jar selenium-server-standalone-3.3.1.jar 安装selenium 服务器4、安装Firefox geckodriver安装firefox最新版本,添加Firefox可执行程序到系统环境变量。记得关闭firefox的自动更新安装geckodriver geckodrive 下载地址 将下载的geckodriver.exe 放到path路径下 D:PythonPython35-325、简单例子官网的一个实例,python_org_search.py。from selenium import webdriverfrom selenium.webdriver.common.keys import Keysdriver = webdriver.Firefox()driver.get("http://www.python.org")assert "Python" in driver.titleelem = driver.find_element_by_name("q")elem.clear()elem.send_keys("pycon")elem.send_keys(Keys.RETURN)assert "No results found." not in driver.page_sourcedriver.close()通过 python3 python_org_search.py 执行执行界面firefox6、踩过的坑1、需要安装 geckodrivererror 12、升级firefox error 23、火狐浏览器如果没有安装至默认目录,webdriver.py和firefox_binary.py的配置需要更改error4、插件间版本的匹配搞不懂。庆幸的是可以跑了~~~

页面有很多链接,如何用selenium进行自动化测试,验证每个链接的正确性?

把所有链接放到一个容器中,写个循环,逐个验证:第一:点击的时候看有无报异常;第二:点击后有无新链接到新窗口,且窗口title是否正确;第三:新窗口有无特定内容;

selenium+python如何爬取简书网站

jianshu首页打开chrome的开发者模式,发现文章的标题,href都在a标签里,似乎也没有什么不一样的a.png接下来就是寻找页面上所有的a标签,但是且慢如果你仔细观察就会发现滑轮滚到一半的时候页面就会加载更多,这样的步骤会重复三次知道底部出现阅读更多的按钮滑轮不仅如此底部的阅读更多的href并没有告诉我们加载剩下的页面信息,唯一的办法是不断点击阅读更多这个按钮load_more.png什么,将滑轮重复三次滑倒页面的中央并且不断点击按钮这种操作http请求可做不到,这更像是js操作?没错,简书的文章并不是常规的http请求,我们不能根据不同url不断重定向,而是页面的一些动作来加载页面信息。selenium介绍selenium是一个web自动化测试工具,支持很多种语言,我们在这里可以使用python的selenium做爬虫使用,爬取简书的过程中,它的工作原理是不断注入js代码,让页面源源不断的加载,最后再提取所有的a标签。首先你得在python中下载selenium包>>> pip3 install seleniumchromedriverselenium必须搭载浏览器使用,这里我使用的是chromedriver,Chrome的开源测试版,它可以使用headless模式不需要显示前段来访问网页,算是最大特性了。python中操作在写代码之前一定要把chromedriver同一文件夹内,因为我们需要引用PATH,这样方便点。首先我们的第一个任务是刷出加载更多的按钮,需要做3次将滑轮重复三次滑倒页面的中央,这里方便起见我滑到了底部from selenium import webdriverimport timebrowser = webdriver.Chrome("./chromedriver")browser.get("https://www.jianshu.com/")for i in range(3): browser.execute_script("window.scrollTo(0, document.body.scrollHeight);") // execute_script是插入js代码的 time.sleep(2) //加载需要时间,2秒比较合理看看效果刷出了按钮接下来就是不断点击按钮加载页面,继续加入刚才的py文件之中for j in range(10): //这里我模拟10次点击 try: button = browser.execute_script("var a = document.getElementsByClassName("load-more"); a[0].click();") time.sleep(2) except: pass""" 上面的js代码说明一下 var a = document.getElementsByClassName("load-more");选择load-more这个元素 a[0].click(); 因为a是一个集合,索引0然后执行click()函数"""这个我就不贴图了,成功之后就是不断地加载页面 ,知道循环完了为止,接下来的工作就简单很多了,就是寻找a标签,get其中的text和href属性,这里我直接把它们写在了txt文件之中.titles = browser.find_elements_by_class_name("title")with open("article_jianshu.txt", "w", encoding="utf-8") as f: for t in titles: try: f.write(t.text + " " + t.get_attribute("href")) f.write("") except TypeError: pass最终结果简书文章headless模式不断加载页面肯定也很烦人,所以我们测试成功之后并不想把浏览器显示出来,这需要加上headless模式options = webdriver.ChromeOptions()options.add_argument("headless")browser = webdriver.Chrome("./chromedriver", chrome_options=options) //把上面的browser加入chrome_options参数总结当我们没办法使用正常的http请求爬取时,可以使用selenium操纵浏览器来抓取我们想要的内容,这样有利有弊,比如优点可以暴力爬虫简书并不需要cookie才能查看文章,不需要费劲心思找代理,或者说我们可以无限抓取并且不会被ban首页应该为ajax传输,不需要额外的http请求缺点爬取速度太满,想象我们的程序,点击一次需要等待2秒那么点击600次需要1200秒, 20分钟...附加这是所有完整的代码from selenium import webdriverimport timeoptions = webdriver.ChromeOptions()options.add_argument("headless")browser = webdriver.Chrome("./chromedriver", chrome_options=options)browser.get("https://www.jianshu.com/")for i in range(3): browser.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(2)# print(browser)for j in range(10): try: button = browser.execute_script("var a = document.getElementsByClassName("load-more"); a[0].click();") time.sleep(2) except: pass#titles = browser.find_elements_by_class_name("title")with open("article_jianshu.txt", "w", encoding="utf-8") as f: for t in titles: try: f.write(t.text + " " + t.get_attribute("href")) f.write("") except TypeError: pass相关推荐:

selenium支持什么浏览器

官方网站上对于 Selenium 支持的浏览器和平台有详细说明: 首先,使用 Selenium RC 和 Selenium Web Driver 所支持的浏览器版本是不同的: Selenium Web Driver:Google Chrome 12.0.712.0+Internet Explorer 6, 7, 8, 9 - 32 and 64-bit where applicableFirefox 3.0, 3.5, 3.6, 4.0, 5.0, 6, 7Opera 11.5+HtmlUnit 2.9Android – 2.3+ for phones and tablets (devices & emulators)iOS 3+ for phones (devices & emulators) and 3.2+ for tablets (devices & emulators) (Android – 2.3 目前仍存在一个模拟器的Bug)

[Selenium自动化测试实战] 不打开浏览器如何进行WEB自动化测试

在一般的使用场景下,使用selenium进行web自动化测试都需要打开一个浏览器的实体,测试脚本通过控制webdriver来对浏览器进行操作。但是在一些场景下测试工程师需要在不打开浏览器的情况下进行自动化测试,也就是以headless的方式运行自动化测试。 u200b 业界有一些headless的第三方库可以使用,例如大名鼎鼎的PhantomJS。但是这些工具的安装很复杂,同时不一定保证持续的维护。 现在全球最受欢迎的浏览器Chrome在Chrome 59 (Chrome 60 for Windows)版本中已经支持了headless mode,只需要配置一些简单的参数就可以实现。 首先要确认自己机子上的Chrome版本。 require "selenium-webdriver" options = Selenium::WebDriver::Chrome::Options.new options.add_argument("--headless") options.add_argument("--disable-gpu") options.add_argument("--remote-debugging-port=9222") driver = Selenium::WebDriver.for :chrome, options: options driver.get "https://www.jd.com" driver.save_screenshot("#{File.dirname(__FILE__)}/#{Time.now.strftime("%F")}") 通过在Selenium::WebDriver::Chrome::Options类的对象中添加argumentoptions.add_argument("--headless"),可以让我们在Chrome在headless模式下运行。 而第二个argument的作用是针对现有bug的work around。第三个argument的作用则是允许我们可以在另外一个浏览器中debug。 为了观测运行的情况,我保存了一个屏幕截图。 相比于之前的headless web自动化方案,Chrome的优势在于设置的方便,甚至可以和当前的框架无缝切换,同时Chrome作为最为主流的浏览器,你也不用担心持续维护的问题。

python selenium如何点击页面table列表中的元素

1.通过selenium定位方式(id、name、xpath等方式)定位table标签#html源码<table border="5" id="table1" width="80%">#selenium操作代码table1=driver.find_element_by_id("table1")2.获取总行数(也就是获取tr标签的个数)#html源码<tr><th>姓名</th><th>性别</th></tr>#selenium操作源码table_rows = table1.find_elements_by_tag_name("tr")3.获取总列数(也就是tr标签下面的th标签个数)#html源码<tr><th>姓名</th><th>性别</th></tr>#selenium操作源码:第一个tr标签下有多少个thtable_rows = table_rows[0].find_elements_by_tag_name("th")4.获取单个cell值#selenium操作源码:第一行第二列的text值row1_col2 = table_rows[1].find_elements_by_tag_name("td")[1].text5.取值比对~

使用python简单封装selenium常用函数

年前走查脚本代码时,发现大家对selenium功能都在重复造轮子,而且容易出现一些常见低级bug。于是在闲暇之余,封装一些常用的selenium功能。 在某些网页中,存在多个frame嵌套。而selenium提供的find_element函数只能在当前frame中查找,不能切换到其他frame中,需要从最上级frame中逐步切换(当然也可以指定xpath的绝对路径,但是一般没人这么做)。在我们写代码过程中,需要明确知道当前frame位置和需要寻找元素的frame位置。在frame切换过程中,容易因为疏忽导致frame切换错误导致元素无法找到的bug。 页面中分布的frame,可以理解为树状结构。因此我们可以采用递归的方式, 沿着某条搜索路线frame节点,依次对树中每个节点均做一次访问。 我们以163网址上的登录框为例:点击登录按钮,弹出登录iframe页面。输入框位置在iframe中,因此我们不能使用xpath获取元素位置,需要进入iframe中,然后获取元素。 手动切换ifame可能会产生bug,因此需要一套自动切换和检索frame的机制。具体代码如下: 需要注意的是:如果页面中多个frame中,存在相同的xpath元素。还是需要指定frame的路径,否则会返回搜索到的第一个元素。 强制等待 直接调用系统time.sleep函数,不管页面加载情况一定会等待指定的时间, 即使元素已被加载 。 1.如果设置的时间较长,会浪费时间 2.如果设置的时间较短,元素可能没有加载。 页面中某元素如果未能立即加载,隐式等待告诉WebDriver需等待一定的时间,然后去查找元素。默认不等待,隐式等待作用于整个WebDriver周期,只需设置一次即可。 1.在上文的find_element函数中,采用递归方式在所有frame寻找元素。若采用隐式等待,则在每个frame中都需要等待设定的时间,耗时非常长。 2.某些页面我们想要的元素已经加载完毕,但是部分其他资源未加载。隐式等待必须等待所有元素加载完毕,增加额外等待时间。 显示等待一般作用于某一个元素,在设定的时间范围内,默认每间隔0.5秒查找元素。返回被加载的元素,若超过设定的时间范围未能查找则报错。显示等待作为selenium常用的等待机制,我们来看下他的源码和机制。 driver 注释中解释为WebDriver实例,但是代码中并未有相关检测,因此可以传入任何对象 但是__repr__函数中使用到session_id属性,如果需要显示属性或者转为str对象,最好在driver对象中添加session_id属性 在until函数中,我们可以看到driver对象传入method函数。在计时结束前,在不断循环执行method函数,如果method函数有正常返回值则退出循环,否则报TimeoutException错误。 可以采用装饰器对隐式等待进行封装,这样代码更加精简 同样的,采用装饰器对其他常用的函数进行封装,例如强制等待、点击、输入文本等。 装饰器虽然很方便,但也会产生一些麻烦。例如在find_element函数递归调用过程中,理应只要执行一次装饰器函数。但因为装饰器已经装饰完毕,导致每次递归都会执行。例如强制等待的sleep函数,如果递归次数越多等待时间越长。 解除装饰器一般有两种做法:一是约定参数,当递归第二次调用时则不生效。例如 这种方式实现简单,容易理解。但是增加了参数限制,在fun函数中就不能使用first_sleep参数。 二是采用装饰器采用wrapped实现,通过访问wrapped属性获得原始函数。例如 但是某一个函数被多个装饰器装饰时,需要递归解除装饰器。例如 最后整体代码如下 这次的封装其实还存在很多问题 1.find_element函数不仅仅只是提供查找元素功能,还提供一些其他功能,因此叫element_operation更为合适。 2.find_element函数的参数过多,并且很多参数的使用并不在函数本身中,对代码阅读很不友好。 3.得小心避免参数重复问题,假设装饰器sleep和装饰器wait_time都使用time这个参数,将无法区分具体是哪个函数使用。 4.不利于扩展和维护,当功能过多时find_element的参数过于庞大。 如果只是简单地封装和使用,上面这种方式也能达到较好的效果。如果想进一步封装,建议采用链式调用方式,装饰器辅助封装。例如 这样函数的扩展性和可阅读性有较大的提升

如何在python中使用selenium

selenium简介selenium提供了一个通用的接口,可模拟用户来操作浏览器,比如用于自动化测试等.selenium的核心是WebDriver,它提供了一组接口,这些接口能够操作各种跨平台的浏览器.各大浏览器厂商.各大浏览器厂商也支持Selenium,将其作为浏览器的一部分.selenium工具集提供了WebDriver,Selenium IDE,Selenium-Grid等Selenium 1.0 + WebDriver = Selenium 2.0Selenium WebDriver是Selenium Remote Control(Selenium-RC)的继承者.WebDriver提供了更简单和简洁的接口,克服了Selenium-RC API一些限制.相比Selenium 1.0,WebDriver是面向对象式的服务.WebDriver驱动浏览器更有效率,提供了比Selenium 1.0更多的功能Selenium RC只能在单机上运行,WebDriver则提供了远程操作的功能selenium基本使用selenium运行需要什么主要包括三部分:selenium selenium,浏览器driver,浏览器selenium selenium是一组通用的接口,而不同的浏览器提供其自身的driver(大部分是官方的),浏览器则被模拟控制操作的终端.安装pip install selenium --upgradeapt-get install chromium-browserwget http://chromedriver.storage.googleapis.com/2.10/chromedriver_linux`getconf LONG_BIT`.zipunzip chromedriver_linux32.zipcp chromedriver /usr/local/sharechmod +x /usr/local/share/chromedriverln -s /usr/local/share/chromedriver /usr/local/bin/chromedriverln -s /usr/bin/chromedriver /usr/local/share/chromedriver简单的使用from selenium import webdriverdriver = webdriver.Chrome("/usr/local/bin/chromedriver")driver.get("http://mail.sina.net");print(driver.title)API使用可参考/usr/local/lib/python2.7/dist-packages/seleniumChrome WebDriverselenium.webdriver.chrome.webdriver.WebDriver(executable_path="chromedriver", port=0, chrome_options=None, service_args=None, desired_capabilities=None, service_log_path=None)ChromeOptions可以通过ChromeDriver session配置ChromeDriver sessionChromeDriverconvenient methods for setting ChromeDriver-specific capabilitiesfrom selenium.webdriver.chrome.options import Optionschrome_options = Options()chrome_options.add_argument("--disable-extensions")chrome_options.add_argument("--disable-logging")chrome_options.add_experimental_option("prefs", {"download.default_directory":"/tmp"})chrome_options.binary_location="/usr/bin/chromium-browser"driver = webdriver.Chrome(chrome_options=chrome_options)直接使用DesiredCapabilitiesChromeOptions是构建在DesiredCapabilities之上的,为了使用DesiredCapabilities,必须知道capability的Key/value对.chrome_options = Options()capabilities={}capabilities["platform"] = "WINDOWS"capabilities["version"] = "10"capabilities.update(chrome_options.to_capabilities())driver = webdriver.Chrome(desired_capabilities=capabilities)chromedriver运行方式The ChromeDriver class不断的创建实例,会浪费很多的时间,可以通过两个方式解决.使用ChromeDriverServiceimport selenium.webdriver.chrome.service as serviceservice = service.Service("/usr/bin/chromedrive")service.start()capabilities = { }driver = webdriver.Remote(service.service_url, capabilities)driver.get("http://mail.sina.net");print(driver.title)开启单独的ChromeDriver服务./chromedriverdriver = webdriver.Remote("http://127.0.0.1:9515", DesiredCapabilities.CHROME)driver.get("http://mail.sina.net");RemoteWebDriverServerThe RemoteWebDriver is composed of two pieces: a client and a server. The client is your WebDriver test and the server is simply a Java servlet, which can be hosted in any modern JEE app server. The server will always run on the machine with the browser you want to test.wget http://selenium-release.storage.googleapis.com/2.53/selenium-server-standalone-2.53.0.jarjava -jar selenium-server-standalone-2.53.0.jarfrom selenium import webdriverfrom selenium.webdriver.common.desired_capabilities import DesiredCapabilitiesdriver = webdriver.Remote( command_executor="http://127.0.0.1:4444/wd/hub",desdesired_capabilities=DesiredCapabilities.CHROME)driver.get("http://mail.sina.net");

如何使用selenium ide

Selenium IDE是Firefox的一个插件,其主要功能是录制操作、回放操作、导出脚本。具体使用方法如下:一、安装Selenium IDE1. 首先,下载Firefox;2. 然后,在Firefox中安装Selenium IDE插件;二、录制1. 首先启动Firefox;2. 点击菜单栏中的工具->Selenium IDE3. 点击红色的录制按钮4. 之后在浏览器中做的操作就录制下来了三、回放点击像播放器一样的按钮即可四、导出脚本点击Selenium IDE 中file菜单,即可看到相关操作需要更详细的介绍,请点击Selenium IDE 中的帮助菜单。

Selenium Webdriver支持哪些浏览器

Selenium Webdriver支持浏览器如下:1、InternetExplorer:InternetExplorerDriver支持IE6、7、8、9。操作系统支持XP、Vista、Windows 7。InternetExplorerDriver同时支持32/64bit的浏览器,这个取决于用的是什么版本的IEDriverServer.exe。2、Firefox:Firefox不像InternetExplorer一样,用户可以自定义安装路径。因此使用时,需要制定firefox.exe的安装路径。3、Chrome:a、Chrome应当安装在默认路径下(如果是从官方下载的,安装后直接都是默认路径)。b、需要下载相应版本的chromedriver,用来架起chrome浏览器与webdriver之间的桥梁。c、与FirefoxDriver差不多,需要设置chromedriver的路径。key值为:webdriver.chrome.driver。

从零开始学python爬虫(八):selenium提取数据和其他使用方法

知识点: 知识点:了解 driver对象的常用属性和方法 注意:最新版本的selenium已经取消了这种格式,取而代之的是: 你要先导入: 然后再: 知识点:掌握 driver对象定位标签元素获取标签对象的方法 代码实现,如下,获取腾讯新闻首页的新闻标签的内容。 知识点:掌握 元素对象的操作方法 参考代码示例: 知识点:掌握 selenium控制标签页的切换 知识点:掌握 selenium控制frame标签的切换 知识点:掌握 利用selenium获取cookie的方法 知识点:掌握 selenium控制浏览器执行js代码的方法 知识点:掌握 手动实现页面等待 知识点:掌握 selenium开启无界面模式 知识点:了解 selenium使用代理ip 知识点:了解 selenium替换user-agent

在ubuntu服务器上进行selenium测试

服务器在阿里云上,将apt源换成阿里的之后,直接 sudo apt install firefox 即可。 Firefox运行还需要D-BUS,因此同时还需要 sudo apt install dbus-x11 xvfb这个仿真框架使用虚拟内存能让X-Server运行在没有显示设备的机器上。这样,浏览器就可以运行了。在ubuntu和Debian上安装xvfb,只要运行: sudo apt-get install xvfb 现在,可以运行xvfb服务上一个带有数字的显示设备上,这样是为了防止你在下阶段添加设备时引发冲突。用以下命令分配一个显示设备 10.. sudo Xvfb :10 -ac -ac代表关闭xvfb的访问控制。 在你运行浏览器前,你首先要设置DISPLAY环境变量,以指定xvfb运行在哪个显示设备上。在加入环境变量前,我们检查一下所有的这些都如我们所料: 如果终端(terminal)没有显示错误,就说明你已经成功运行Firefox在无显示设备的ubuntu上了。它会一直运行,直到你使用ctrl + C或其它类似方法来终止其运行。同时,它不会有任何输出。 如果你能成功运行以上的步骤,那么接下来的部分就是轻而易举了。现在,我们可以在ubuntu服务器上运行selenium,如同你在本地运行一样。 安装完成后,将geckodriver所在路径写入PATH中,之后就可以在服务端进行selenium测试 笔者使用的shell是zsh,为了把PATH和DISPLAY这两个变量固定下来,在 ~/.zshrc 中将下面两句语句写入 安装xvfb之后,可以考虑使用python库pyvirtualdisplay,防止出现geckodriver出现GBK_BACKEND相关错误

selenium 测试工具只能用在火狐浏览器上吗?

如果你用的是RC,很多浏览器都支持,只是firefox能用IDE录制脚本,你可以先写好脚本,然后就可以在其他种类的浏览器上测试了。

如何利用selenium写自动化测试脚本

一开始,基本上很多人都是用selenium IDE录制脚本开始的,我也是!有一本书写得很不错:selenium初学者指南!So,从录制回放开始我的selenium,而在这个过程中,不断地去补充我的html css知识,熟悉selenium的api!慢慢地,发现录制的脚本在回放的时候经常报错,通过检查发现,是定位上的错误,导致这种定位的错误的最大原因是系统前端采用了某种框架,如tigerUI,exj....所以HTML里面的标签很多都是动态的,比如id,class,name!这对selenium操作定位的元素而进行自动化来说是致命伤!所以,开始自己写定位信息,这已经是必须的了!从而学习了xpth和css选择器,掌握了更加有效,快速和稳定地定位页面上的元素(定位的时候难免会碰到有iframe,这就得先切换到iframe中再进行定位了)!也就是,在selenium IDE上写脚本!信心满满地在selenium IDE上写了长长地一段脚本,并且反复跑都能成功!总算尝到了一点点幸福的滋味!然后呢,问题来了,当我要修改和扩展这段的脚本的时候,才发现这效率是相当地低!一句句查!一句句改!多么痛的领悟!另外,selenium IDE 默认启动的是火狐,在使用selenium RC 启动 IE 进行跑脚本时浏览器总是会报错!各种搞不定,各种不淡定!决定放弃使用IDE!selenium有一个强大之处就是支持多种语方:java,C#,python等等,并且可以把录制的脚本转换成代码!我用的是java,果断走起!不用说,当然是把脚本转为java代码了,在E www.hbbz08.com clipse中重新开始搞!选择一个测试框架:有Junit和TestNg两个选择,公司用的是junit,所以,不用多说,我就用junit验证selenium脚本的运行结果!并且,Junit和TestNG都可以生成比较直观的测试报告!写好一些代码,会看到整段代码中密密麻麻充斥着基本相同的代码:开始封装代码!把常用到API封装起来!封装好之后代码看着就舒服多了!接下来,是不是也应该把代码中的定位信息用一个专门的文件放起来,再去读取里面的定位信息,这样,维护代码和维护定位信息就放在了两个地方,不用老是扎在代码和定位路径中,简单地分一下层!果断尝试!

python selenium设置浏览器参数

设置浏览器参数 为了避免每次运行程序都打开一个窗口,我们也可以设置无窗口访问,只需添加浏览器参数即可: from selenium import webdriver from selenium.webdriver.chrome.options import Options url = " https://www.baidu.com/" chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument("lang=zh_CN.utf-8") UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36" chrome_options.add_argument("User-Agent=" + UserAgent) driver = webdriver.Chrome(chrome_options=chrome_options) driver.maximize_window() driver.minimize_window() driver.get(url) print(driver.title) 常用参数 启动就最大化--start-maximized 指定用户文件夹 User Data 路径,可以把书签这样的用户数据保存在系统分区以外的分区–-user-data-dir=”[PATH]” 指定缓存Cache路径–-disk-cache-dir=“[PATH]” 指定Cache大小,单位Byte–-disk-cache-size=100 隐身模式启动–-incognito 禁用Javascript–-disable-javascript# 禁止加载所有插件,可以增加速度--disable-plugins 禁用JavaScript--disable-javascript 禁用弹出拦截--disable-popup-blocking 禁用插件--disable-plugins 禁用图像--disable-images 设置代理chrome_options.add_argument("--proxy-server=http://{ip}:{port}") #http://127.1.1.10:8080

Python selenium 三种等待方式

很多人在群里问,这个下拉框定位不到、那个弹出框定位不到各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待。殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么量级的,就好比闪电侠和凹凸曼约好去打怪兽,然后闪电侠打完回来之后问凹凸曼你为啥还在穿鞋没出门?凹凸曼分分中内心一万只羊驼飞过,欺负哥速度慢,哥不跟你玩了,抛个异常撂挑子了。那么怎么才能照顾到凹凸曼缓慢的加载速度呢?只有一个办法,那就是等喽。说到等,又有三种等法,且听博主一一道来:1. 强制等待第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间。看代码:?12345678# -*- coding: utf-8 -*-fromseleniumimportwebdriverfromtimeimportsleepdriver=webdriver.Firefox()driver.get(sleep(3)# 强制等待3秒再执行下一步printdriver.current_urldriver.quit()这种叫强制等待,不管你浏览器是否加载完了,程序都得等待3秒,3秒一到,继续执行下面的代码,作为调试很有用,有时候也可以在代码里这样等待,不过不建议总用这种等待方式,太死板,严重影响程序执行速度。2. 隐性等待第二种办法叫隐性等待,implicitly_wait(xx),隐性等待的意义是:闪电侠和凹凸曼约定好,不论闪电侠去哪儿,都要等凹凸曼xx秒,如果凹凸曼在这段时间内来了,则俩人立即出发去打怪兽,如果凹凸曼在规定时间内没到,则闪电侠自己去,那自然就等着凹凸曼给你抛异常吧。看代码:?1234567# -*- coding: utf-8 -*-fromseleniumimportwebdriverdriver=webdriver.Firefox()

Selenium中怎么实现元素定位?

Selenium定位元素的方法有很多种,像是通过id、name、class_name、tag_name、link_text等等,但是这些方法局限性太大, 随着自动化测试的深入,和不同框架要求,会发现上面的定位方式无法解决一些元素定位。尤其对于这样一些元素:1、没有id、name、class等属性;2、标签的属性或文本信息特征没有或者不明显;3、标签嵌套复杂,层次太多等。所以这些方法了解一下即可,我们真正需要熟练掌握的是通过xpath和css定位,一般只要掌握一种就可以应对大部分定位工作了。

Selenium怎样驱动Firefox浏览器

一、Selenium怎样驱动Firefox浏览器: 首先打开Selenium的官网,在地址栏输入http://www.seleniumhq.org/好了,这就是三个需要下载的东西:然后解压,添加.jar包到你的工程里面把这个放到你的Firefox浏览器的安装目录下:如果你是用Maven来构建的话,就就不用去Selenium的官网下载,只需要以下几行:<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-firefox-driver</artifactId> <version>3.4.0</version></dependency> 版本号可以随便修改,官网上最新的是3.5.3;如果你用的是Gradle来构建的话,只需要一行:compile "org.seleniumhq.selenium:selenium-firefox-driver:3.5.3"好了,引入第三方依赖的准备工作都完成了,让我们开始写代码:import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import java.util.concurrent.TimeUnit;public class FirefoxBrowser { public static void main(String[] args) { WebDriver driver; //声明WebDriver System.setProperty("webdriver.firefox.marionette", "C:\Program Files\Mozilla Firefox\firefox.exe"); //指定Firefox浏览器的路径 String Url = "https://www.baidu.com"; //百度的地址 driver =new FirefoxDriver(); //new一个FirefoxDriver() driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //设置显式等待10秒钟 driver.get(Url); //打开百度首页 driver.manage().window().maximize(); //把浏览器窗口最大化 try { Thread.sleep(3000); //让线程等待3秒钟 } catch (InterruptedException e) { e.printStackTrace(); } driver.quit(); //退出driver }}好了,让我们来跑一把:成功的启动了Firefox浏览器,并且打开了百度;这里需要注意的是Firefox的版本不能是官网上最新的,因为Firefox迭代的太频繁了,我用的是46,这里有一个历史版本的地址:http://ftp.mozilla.org/pub/firefox/releases/然后需要注意的是:System.setProperty("webdriver.firefox.marionette", "C:\Program Files\Mozilla Firefox\firefox.exe");这行代码不要写错了!

python34怎么离线安装selenium

selenium 为UI自动化测试工具,主要用来进行UI自动化测试,缩减测试员工的测试时间,其主要安装方式有两种,第一种为在线安装;第二种为离线安装(内网缺网环境的安装,并进行比对)第一种,在线安装从我的网盘中下载python 2.7.9的版本,下一步到底即可,可以在c盘中生成一个C:Python27的文件夹。此时python版本已经安装好,我们需要在线安装selenium的版本,我们进入到C:Python27目录下,可以看到Scripts的文件夹,点开后进去我们可以看到pip.exe的文件,如果没有,则需要网上下载安装,如果有,则直接的在dos命令下执行命令,如下图所示,则为执行成功了。此时,我们打开eclipse,在其中输入from selnium import webdriver,安装ctrl,鼠标左击则打开了webdriver的代码,如下图所示可以看到eclipse已经加载到webdriver的功能,已经安装完毕进行下面的离线之旅。第二种,离线安装首先,我们安装python的目录,还是默认的C:Python27,下载我的网盘中的tar包,解压文件,我们可以看到里面的分支结构,如下,把该内容复制到C:Python27内,setup.py 和python.exe在同一个目录下进入到C:Python下运行 python setup.py install,则可以看到运行成功,我们再次打开eclipse执行上述的验证操作,可以听到“叮”的一声,可以肯定的是没有安装成功,调用的时候失败了其实并没有失败,我们没有将selenium的环境变量配置到eclipse中,我们打开eclipse,windows-Preferences-PyDev-Interpreters-Python Interpreters-Python Interpreters.在其中添加selenium的egg文件,如下图所示然后我们在eclipse中就可以打开from selenium import webdriver 了

如何搭建selenium与java环境

1、安装、配置JDK1.6配置JAVA_HOME右击我的电脑-->属性-->高级系统设置-->高级-->环境变量 在Path中增加%JAVA_HOME%in; 2、Java IDE中引用selenium-java-2.40.0.jar,selenium-server-standalone-2.40.0.jar 项目目录右键-->Build Path--> config build path-->Java BuildPath-->Libraries-->Add External JARs,添加selenium-java-2.40.0.jar,selenium-server-standalone-2.40.0.jar 3、拷贝chromedriver.exe到system32目录,安装chrome浏览器 4、测试环境是否搭建成功 <pre t="code" l="java">import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class test1 { public static void main(String[] args) throws InterruptedException { WebDriver dr = new ChromeDriver(); dr.get("); //打开首页 dr.manage().window().maximize(); //最大化 Thread.sleep(3000); dr.quit(); } }

python中selenium控制浏览器尺寸

之前在自己电脑上写的代码测试运行非常完美,于是特别转移到了单独的一台笔记本上运行。 运行了几天之后发现有问题。selenium在抓取数据的时候莫名其妙的有一部分数据抓取不到。 分析代码呀什么的都没问题呀,奇了怪了。 三个td 前两个td里面的内容抓取的一点问题都没有,但是抓取第三个的时候就总是出错,用我自己的电脑测试就是好的。 我一度怀疑是不是我的笔记本电脑有什么驱动或者硬件导致的问题。 前两个能抓取到,shuliang抓取不到。如果我把shuliang里面的td[5]换成td[4]就是抓取他前面那一个元素,也是没问题的。但是我换成td[6]抓取他后面的元素就不行。 最后我发现有可能是selenium打开的chrome浏览器大小的问题,因为浏览器里面打开的页面正好只能显示到td[4],第5列显示不出来。 于是加一行代码 控制一下打开浏览器的大小,测试成功。shuliang成功抓取到了数据。 看来selenium真的是不是所见即所得的抓取模式,浏览器里面遮住的部分,他就抓不到了。 这可能也是很多selenium写好的代码换到别的电脑上执行就会出错的一个原因之一吧。 今天的分享记录就到这了。

Selenium的组件

Selenium IDE:一个Firefox插件,可以录制用户的基本操作,生成测试用例。随后可以运行这些测试用例在浏览器里回放,可将测试用例转换为其他语言的自动化脚本。 Selenium Remote Control (RC) :支持多种平台(Windows,Linux,Solaris)和多种浏览器(IE,Firefox,Opera,Safari),可以用多种语言(Java,Ruby,Python,Perl,PHP,C#)编写测试用例。 Selenium Grid :允许Selenium-RC 针对规模庞大的测试案例集或者需要在不同环境中运行的测试案例集进行扩展。

如何搭建selenium+java环境搭建

http://www.cnblogs.com/xuebi/p/5774822.html

selenium模拟多种键盘操作

键盘是使用电脑是必不可少的设备。我们可能做键盘输入,也可以做其他功能性操作.这次主要为大家详细介绍了python selenium 键盘操作,教大家如何玩转selenium 键盘操作,感兴趣的小伙伴们可以参考一下 首先selenium对键盘上各个按键进行了分类: A:修饰键,不单独使用,通常搭配普通键, selenium中send_keys按下普通键 B:普通键,修饰键外的按键。selenium中key_down,key_up对应其按下和释放操作 对于普通键,又分为有名按键和无名按键。 A:无名按键:数字0到9,和字母a到z对应的按键 B:有名按键:指其他按键。 selenium中的Keys类定义了各个有名按键,如 Keys.ENTER, Keys.SHIFT 等。 用户的键盘操作可以分为三类:普通输入,功能键点击,组合键使用。操作实例如下: 1. 模拟普通输入操作-----百度搜索框输入 2. 模拟有名按键点击-----提交百度搜索请求 3. 模拟修饰键使用-----全选输入框内容,并按回退键删除

从零开始学Python-使用Selenium抓取动态网页数据

您可以按照以下步骤来配置八爪鱼采集器进行数据采集:1. 打开八爪鱼采集器,并创建一个新的采集任务。2. 在任务设置中,输入要采集的网址作为采集的起始网址。3. 配置采集规则。可以使用智能识别功能,让八爪鱼自动识别页面的数据结构,或者手动设置采集规则。4. 如果手动设置采集规则,可以通过鼠标选择页面上的数据元素,并设置相应的采集规则,以确保正确获取所需的数据。5. 设置翻页规则。如果需要采集多页数据,可以设置八爪鱼采集器自动翻页,以获取更多的数据。6. 运行采集任务。确认设置无误后,可以启动采集任务,让八爪鱼开始采集数据。7. 等待采集完成。八爪鱼将根据设置的规则自动抓取页面上的数据,并将其保存到本地或导出到指定的数据库等。八爪鱼采集器是一款功能全面、操作简单、适用范围广泛的互联网数据采集器,可以帮助您轻松解决数据采集问题。了解更多八爪鱼采集器的功能和使用方法,请前往官网教程与帮助了解更多详情。

java怎么安装selenium

为了开发Selenium RC或webdriver脚本,用户必须确保他们有初始配置完成。有很多关联建立环境的步骤。这里将通过详细的讲解。下载并安装Java下载并配置Eclipse配置Firebug和FirePath配置Selenium RC配置Selenium的webdriver

如何检测安装成功selenium

安装成功后,会在你的python目录下产生产生一个selenium文件夹C:Python27Libsite-packagesselenium-2.53.5-py2.7.egg里面有2个文件夹EGG-INFO和selenium如果有这个就基本代表安装成功了楼主也可以在py程序里用from selenium import selenium试试,运行成功则代表安装是成功的

页面有很多链接,如何用selenium进行自动化测试,验证每个链接的正确性

点击了,然后切换到新网页,去查看title

如何利用selenium 录制脚本

下面将演示Selenium的使用:1.安装Selenium IDE,Firebug。2.启动Selenium IDE: IDE启动后,弹出如下对话框: 上图标明了一些Selenium IDE的主要功能。其中,由Command,Target,Value组成的表格就是脚本,每个脚本都是由一条一条的Action(行为)组成,而每个Action又由(Command,Target,Value)三者组成。Command就是上文《API参考手册》提到的内容,Target指的是Web中的某个对象,比如:文字,输入框等等,如果选取对象呢?呵呵,这里就用到了XPath,不熟悉可以参考《XPath的使用》,而Value就是这个对象的值。3.脚本的录制及运行 当弹出上面的IDE窗口后,我们就可以开始Selenium的脚本录制了,右上角有个红色的圆点,当它下按时(如上图)就表示IDE正在进行脚本录制。OK,开始录制,录制的时候,直接操作Firefox浏览器窗口就可以了,IDE会自动记录你的操作的,下面我演示一个例子:上图例子中,我的操作步骤如下:(1).在地址栏输入:http://www.baidu.com/(2).登陆百度首页后,在查询框输入“hyddd”。(3).按“百度一下”按钮(4).进入搜索结果页面后,右键单击第一条记录(即:hyddd - 博客园),在右键弹出菜单中,单击“Verify TestPersent hyddd - 博客园”。(5).单击第一条记录(即:进入hyddd - 博客园)(6).Firefox弹出一个新Tab页面,并进入了我的博客。OK,现在看看我们的Selenium IDE录制的结果吧:> 上图中,中间的表格就是录制的结果,你可以按“运行脚本”重新回放脚本看看,值得注意的是,在运行时,Firefox可能会认为脚本中最后一个操作(即:步骤6)为非法弹出框,浏览器会自动阻止其弹出,这个需要设置一下Firefox,具体位置是:Firefox->Menubar->Tools->options->content->Block pop-up Window,你可以把钩去掉或者在Exceptions里面添加相应的网址。 恩,到此为止,脚本录制圆满完成:> 在运行脚本后,你会发现IDE表格的颜色发生了变化,运行前,脚本表格为白色,成功运行完毕后,表格为青色,其中还分为深青色和浅青色两种,浅青色表示:动作成功,如:打开网页成功,点击按钮成功等等,而深青色表示:判断正确,如:“hyddd - 博客园”这段文字在页面中存在等等。 看完正确,现在我们看看出错时的情况吧。出错时,表格可能会出现两种颜色,一种是浅粉红色,一种是深粉红色。浅粉红色表示判断结果为false,这种情况案例还是会继续执行下去,判断的失败不会影响案例的运行,深粉红色表示动作失败,如:没有找到按钮等(如上图),这种情况下案例会停止运行。

Mac安装selenium

一、安装selenium 问题:提示未找到pip MacBook-Air ~ % pip install selenium zsh: command not found: pip 解决方案: sudo easy_install pip 安装selenium(sudo pip uninstall selenium 卸载selenium) 二、安装Chrome浏览器驱动chromedriver 1、查看已安装谷歌版本:

如何在python中使用selenium

1、下载Python2.7版本,默认运行安装即可; 2、安装完成之后,设置Python环境变量C:Python27(操作步骤: 电脑->属性->高级->环境变量->系统变量中的PATH为:变量值: ;C:Python27 ) 3、在python的官方网站上可以找到SetupTools的下载,解压安装安装即可; 4、当安装SetupTools之后,就可以在python安装目录下看到Script目录, 5、同样在变量中加入 path:C:Python27Scripts, 6、打开cmd命令行,将目录切换到C:Python27Scripts下,输入命令“easy_install pip“安装pip; 7、安装成功pip之后,执行pip install -U selenium 进行下载安装最新selenium的版本。

如何搭建python+selenium开发环境教程讲解

这篇文章主要为大家详细介绍了python+selenium开发环境搭建的图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下web 调试工具介绍和开发环境搭建python与selenium开发环境搭建:一、下载python软件:https://www.python.org/下载完后,进行安装,安装成功后,打开IDLE(Python 3.6.2),如下图:如上图在里面输入print("Hello Wrod!")按回车,出现Hello Wrod!,说明已经把IDLE装好了,下面打开dos命令窗口输入Python按回车。如下图:出现python版本号等信息说明python已经安装成功。如果出现错误信息,则需要配置环境变量:在环境系统变量Path中添加python的安装目录,比如:C:Python35Scripts;C:Python35,这个是安装在C盘的目录。二、安装pip:https://pypi.python.org/pypi/pip下载完成后解压,打开dos命令窗口进入刚才解压后的文件夹里面(如:D:pip-9.0.1,这个是解压后的pip文件夹)输入如下信息:输入如下信息后按回车键,进行安装,安装完后显示安装目录为:C:Python35Libsite-packagespip-9.0.1-py3.5.egg再dos命令窗口输入:pip.exe按回车,如下图:然后配置环境变量,在环境系统变量Path中添加C:Python35Libsite-packagespip-9.0.1-py3.5.egg(这个是安装在C盘的目录)。再次打开打开IDLE(Python 3.6.2)输入import selenium按回车键,如下图:如果没有找到selenium可以使用pip install -U selenium命令安装下面使用selenium打开firefox浏览器:首先到https://github.com/mozilla/geckodriver/releases下载geckodriver.exe,下载完后将该exe放入python安装根目录下(与python.exe同一目录)在IDLE(Python 3.6.2)中输入import selenium按回车,再入from selenium import webdriver按回车,最后输入browser=webdriver.Firefox()按回车键就能成功调用firefox浏览器。如图:firefox前端工具介绍:1.fireBug:FireFox浏览器下的一套开发类插件2.作用:查看页面上的元素,从而根据其属性进行定位如何安装fireBug,打开FireFox浏览器照以下图片上的操作进行安装即可:前端技术介绍:1.html:网页的基础,是一种标记语言,显示数据;2.JS:前端脚本语言,解释型语言,在页面中添加交互行为;3.xml:扩展标记语言,用来传输和存储数据4.css:层叠样式表,用来表现HTML或XML等文件样式下面使用selenium打开chrome浏览器(安装Chrome浏览器webdriver):1.安装chrome浏览器;2.下载chromedriver.exe;3.将下载的chromedriver.exe文件放到安装Chrome浏览器目录下面(如:C:UsersAdministratorAppDataLocalGoogleChromeApplication)4.配置环境变量,将C:UsersAdministratorAppDataLocalGoogleChromeApplication添加到环境系统变量Path中。在IDLE(Python 3.6.2)中输入import selenium按回车,再入from selenium import webdriver按回车,最后输入b=webdriver.Chrome()按回车键就能成功调用chrome浏览器。如图:

Selenium获取input输入框中值的三种方法

第一种用jQuery的val方法: js = "return $("input").val();" driver.execute_script(js) 第二种用jQuery的attr方法: js = "return $("input").attr("value");" driver.execute_script(js) 第三种用selenium自带的方法: driver.find_element_by_tag_name("input").get_attribute("value")

selenium打开新窗口并切换

fromseleniumimportwebdriverdriver=webdriver.Chrome() driver.maximize_window() driver.implicitly_wait(2) driver.get("https://www.baidu.com/") #打印当前操作界面的句柄 print(driver.current_window_handle) driver.implicitly_wait(2) driver.find_element_by_id("kw").send_keys("selenium") #获取所有句柄 all_handles=driver.window_handles print(all_handles) driver.find_element_by_id("su").click() driver.implicitly_wait(2) #电击后进入新窗口,新窗口有自己的句柄 driver.find_element_by_link_text("百度翻译").click() driver.implicitly_wait(2) #获取进入新窗口后所有的句柄 all_handles2=driver.window_handles print(all_handles2) driver.implicitly_wait(2) #拿到新窗口句柄 并切换到新窗口 newhandle=[handleforhandleinall_handles2ifhandlenotinall_handles] driver.switch_to.window(newhandle[0]) print(driver.title) #关闭当前窗口 driver.close() driver.implicitly_wait(5) #切换到原窗口 driver.switch_to.window(all_handles[0]) print(driver.title) print(driver.current_window_handle) driver.quit()

selenium是什么?

做自动化测试时候运的,相当于按键精灵

selenium怎么读

1、selenium英[s__li_ni_m]美[s__li_ni_m],n.硒(化学元素,用于制造电气设备和有色玻璃,人体缺此元素可致抑郁等病)。2、[例句]Lowlevelsofseleniumhavebeenlinkedtoincreasedriskofdevelopingmoresevereflu.缺硒与重感冒有关。

如何在python中使用selenium

下载python版本的python包,放入到python的lib下面,然后下载selenium的jar。启动使用Java -jar selenium-server-standalone-2.0b3.jar测试例子:from selenium import webdriverfrom selenium.common.exceptions import NoSuchElementExceptionfrom selenium.webdriver.common.keys import Keysimport timebrowser = webdriver.Firefox() # Get local session of firefoxbrowser.get("") # Load pageassert "Yahoo!" in browser.titleelem = browser.find_element_by_name("p") # Find the query boxelem.send_keys("seleniumhq" + Keys.RETURN)time.sleep(0.2) # Let the page load, will be added to the APItry:browser.find_element_by_xpath("//a[contains(@href,"")]")except NoSuchElementException:assert 0, "can"t find seleniumhq"browser.close()运行的结果是打开雅虎浏览器搜素seleniuhq,然后查找Selenium (SeleniumHQ) 是 thoughtworks公司的一个集成测试的强大工具。一、Selenium 的版本Selenium 现在存在2个版本,一个叫 selenium-core, 一个叫selenium-rc 。selenium-core 是使用HTML的方式来编写测试脚本,你也可以使用 Selenium-IDE来录制脚本,但是目前Selenium-IDE只有 FireFox 版本。Selenium-RC 是 selenium-remote control 缩写,是使用具体的语言来编写测试类。selenium-rc 支持的语言非常多,这里我们着重关注java的方式。这里讲的也主要是 selenium-rc,因为个人还是喜欢这种方式.下图是Selenium IDE的运行界面截图:

Selenium 各个版本之间有什么区别?

Selenium v1.0 的核心组件是 Selenium RC;Selenium v2.0 的核心组件是 WebDriver;因此可以说 v1.0 版本和 v2.0 版本完全是两套东西。而 Selenium v3.0 和 Selenium v2.0 没有本质上的变化,只是在 v2.0 版本的基础上,增加支持更多的浏览器和更新的操作系统及新版本的开发语言。如果感兴趣,可以从黑马程序员获取更多资料进行了解。

怎样开始用selenium进行自动化测试

selenium 是一款开源的自动化测试框架,可以有两种开始学习的方式。第一种是使用selenium的IDE进行录制和回放脚本,这个IDE是Firefox的一个插件,网上有很多介绍和下载地址。这一种方式主要是刚接触selenium时,当对selenium的相关原理了解之后,可以开始第二种开始方式,这种方式涉及到代码编写,selenium支持很多种语言作为脚本,本人推荐java或者python。第二种方式主要是根据测试的需要,进行脚本的优化以及测试数据参数化等。当第二种方式比较熟悉之后,你就可以考虑进行基于selenium的二次开发,形成适合自己的自动化测试框架了。

使用selenium IED自动化脚本,以及怎么导出脚本

一开始,基本上很多人都是用selenium IDE录制脚本开始的,我也是!有一本书写得很不错:selenium初学者指南!So,从录制回放开始我的selenium,而在这个过程中,不断地去补充我的html css知识,熟悉selenium的api!慢慢地,发现录制的脚本在回放的时候经常报错,通过检查发现,是定位上的错误,导致这种定位的错误的最大原因是系统前端采用了某种框架,如tigerUI,exj....所以HTML里面的标签很多都是动态的,比如id,class,name!这对selenium操作定位的元素而进行自动化来说是致命伤!所以,开始自己写定位信息,这已经是必须的了!从而学习了xpth和css选择器,掌握了更加有效,快速和稳定地定位页面上的元素(定位的时候难免会碰到有iframe,这就得先切换到iframe中再进行定位了)!也就是,在selenium IDE上写脚本!信心满满地在selenium IDE上写了长长地一段脚本,并且反复跑都能成功!总算尝到了一点点幸福的滋味!然后呢,问题来了,当我要修改和扩展这段的脚本的时候,才发现这效率是相当地低!一句句查!一句句改!多么痛的领悟!另外,selenium IDE 默认启动的是火狐,在使用selenium RC 启动 IE 进行跑脚本时浏览器总是会报错!各种搞不定,各种不淡定!决定放弃使用IDE!selenium有一个强大之处就是支持多种语方:java,C#,python等等,并且可以把录制的脚本转换成代码!我用的是java,果断走起!不用说,当然是把脚本转为java代码了,在E clipse中重新开始搞!选择一个测试框架:有Junit和TestNg两个选择,公司用的是junit,所以,不用多说,我就用junit验证selenium脚本的运行结果!并且,Junit和TestNG都可以生成比较直观的测试报告!写好一些代码,会看到整段代码中密密麻麻充斥着基本相同的代码:开始封装代码!把常用到API封装起来!封装好之后代码看着就舒服多了!接下来,是不是也应该把代码中的定位信息用一个专门的文件放起来,再去读取里面的定位信息,这样,维护代码和维护定位信息就放在了两个地方,不用老是扎在代码和定位路径中,简单地分一下层!果断尝试!

Selenium之鼠标操作

在做自动化测试的时候,经常会遇到这种情况,某个页面元素,你必须要把鼠标移动到上面才能显示出元素。那么这种情况,我们怎么处理呢?,selenium给我们提供了一个类来处理这类事件——ActionChains。 ActionChains可以对需要模拟鼠标操作才能进行的情况,比如单击、双击、点击鼠标右键、拖拽等等进行操作。ActionChains方法列表: click(on_element=None) ——单击鼠标左键 click_and_hold(on_element=None) ——点击鼠标左键,不松开 context_click(on_element=None) ——点击鼠标右键 double_click(on_element=None) ——双击鼠标左键 drag_and_drop(source, target) ——拖拽到某个元素然后松开 drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开 key_down(value, element=None) ——按下某个键盘上的键 key_up(value, element=None) ——松开某个键 move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标 move_to_element(to_element) ——鼠标移动到某个元素 move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置 perform() ——执行链中的所有动作 release(on_element=None) ——在某个元素位置松开鼠标左键 send_keys(*keys_to_send) ——发送某个键到当前焦点的元素 send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素

如何利用selenium来进行自动化页面测试

建立一个测试工程,在工程里创建一个测试文件,并添加如下代码:import com.thoughtworks.selenium.Selenium;import junit.framework.TestCase;import org.junit.After;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.BlockJUnit4ClassRunner;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebDriverBackedSelenium;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.openqa.selenium.internal.WrapsDriver;import org.openqa.selenium.support.ui.Wait;import org.openqa.selenium.support.ui.WebDriverWait;import java.io.IOException;import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfElementLocated;@RunWith(BlockJUnit4ClassRunner.class)public class pickTest extends TestCase {protected static Selenium selenium;private static WebDriver driver;@Beforepublic void createAndStartService() throws IOException {selenium = new WebDriverBackedSelenium(new FirefoxDriver(), "");driver = ((WrapsDriver) selenium).getWrappedDriver();}@Afterpublic void createAndStopService() {driver.quit();}

python selenium 怎么定位form里边的元素

xpath定位,你用chrome浏览器,在页面上右键-》审查元素,然后会弹出开发者工具,里面会显示你选中部分的页面源码并高亮你选择的地方,在源码里右键,选择copy xpath 用这个定位

你需要知道的有关Selenium异常处理的都在这儿

什么是异常?   顾名思义,作为程序员的一种常用术语,“异常”与任何特定的编程语言无关。它属于程序因为突然中止,而未能交付出预期输出的事件。通常,引发异常出现的潜在因素往往来自如下方面:   · Java虚拟内存(JVM)的不足   · 请求访问的文件在目标系统中不存在   · 用户提供了无效的数据   · 在正常的通信过程中突然出现断网    Java中的异常类型   1. 已查明的异常(Checked Exceptions):编译器在编译的过程中,会检查到这些异常,并验证它们是否已被处理。如果未被处理,系统会报告编译错误。因此它们被通称为编译时异常(compile-time exceptions)。下面是一些常见的此类异常示例:   · SQLException:程序在基于 SQL 语法执行 数据库 查询时,可能会产生此类异常。   · IOException:程序在文件上执行无效的I/O流操作时,可能会产生此类异常。   · ClassNotFoundException:当JVM无法找到所需的Java类时,可能会产生此类异常。   2. 未查明的异常(Unchecked Exceptions):这些异常是在程序的执行期间发生的逻辑错误,因此通常称为运行时异常(Runtime Exceptions)。此类异常在编译时未被检查出来,或者在整个编译过程中已被忽略。下面是一些典型的此类异常示例:   · NullPointerException:当访问具有空值的对象时,可能会产生此类异常。   · ArrayIndexOutofBound:当使用无效的索引值去访问数组时,可能会产生此类异常。   · IllegalArgumentException:当程序将不正确的参数传递给方法时,可能会产生此类异常。   · NumberFormatException:当程序将字符串传递给无法转换为数字的方法时,可能会产生此类异常。   · ArithmeticException:当程序执行不正确的算术运算(例如将数字除以零)时,可能会产生此类异常。    异常处理标准   通过对异常处理能力的提升,我们不仅可以保持代码的整洁,而且能够增强其可维护性、可扩展性和可阅读性。当然,不同的面向对象编程(Object-Oriented Programming,OOP)语言,具有不同的异常处理方法。以下是一些常用的Java异常处理标准:   Try-Catch:该关键字组合可被用于捕获异常。其中,try块应当被放在开头,而catch块应被放在try块的末尾,以便捕获异常,并采取必要的行动。也就是说,我们可以在遇到异常时,创建异常类的对象,以便使用以下预定义的方法,来显示调试信息:   · printStackTrace():该函数可用于打印栈的跟踪、异常的名称、以及其他重要的异常信息。   · getMessage():此函数有助于获取针对异常的深入描述。   try   {   // Code   } catch(Exception e){   // Code for Handling exception   }   同时,Try-Catch块也可以用其他高级方法来处理异常,例如,我们可能希望从单个代码块中捕获多个异常,那么就可以通过在try块之后的多个catch块,去处理不同的异常。而且,我们在try块之后,使用无限数量的catch块。   try   {   //Code   } catch(ExceptionType1 e1){   //Code for Handling Exception 1   } catch(ExceptionType2 e2){   //Code for Handling Exception 2   }   Throw/Throws:如果程序员想显式地抛出异常,那么可以使用throw关键字,与要在运行时处理的异常对象协同使用。   public static void exceptionProgram()throws Exception{   try {   // write your code here   } Catch(Exception b){   // Throw an Exception explicitly   throw(b); }   }   如果开发者想抛出多个异常,则可以通过在方法签名的子句中使用throws关键字来抛出,并且由方法的调用者去进行异常处理。   public static void exceptionProgram()throws ExceptionType1, ExceptionType2{   try {   // write your code here   } catch(ExceptionType1 e1){   // Code to handle exception 1   } catch(ExceptionType1 e2){   // Code to handle exception 2   }   finally:该个代码块往往是在try-catch块之后被创建的。也就是说,无论是否抛出异常,它都会被执行。   try {   //Code   } catch(ExceptionType1 e1){   //Catch block   } catch(ExceptionType2 e2){   //Catch block   } finally {   //The finally block always executes.   }   Selenium中的常见异常   WebDriverException定义了Selenium中的多种异常,我们从中选取最常见的异常予以介绍,并配上简单的针对Selenium的异常处理方案:    1. NoSuchElementException   当WebDriver无法定位所需要元素时,Selenium可能会产生此类异常。此处的NoSuchElementException是NotFoundException类的子类,它通常出现在程序使用了无效的定位器时。   此外,如果WebDriver仍然停留在上一页、或正在加载下一页,而所需的定位器已到达了下一页时,就会因为该延迟而出现异常。为此,我们应当通过适当的等待处理 测试 ,最大限度地减少此类异常的发生。   当然,此类异常可以在catch块中被捕获到,并且可以在其中执行所需的操作,以继续完成自动化的测试。例如:   try { driver.findElement(By.id("form-save")).click(); } catch(NoSuchElementException e){   System.out.println(“WebDriver couldn"t locate the element”); }    2. NoSuchWindowException   该异常也是NotFoundException类的子类。如果WebDriver尝试着切换到无效的 浏览器 窗口,那么WebDriver将抛出NoSuchWindowException。因此,要实现窗口切换的好方法是,首先获取活动窗口的会话,然后在对应的窗口上执行所需的操作。例如:   for(String windowHandle : driver.getWindowHandles()){   try { driver.switchTo().window(handle); } catch(NoSuchWindowException e){ System.out.println(“Exception while switching browser window”); }   }   3. NoAlertPresentException   当WebDriver尝试着切换到某个不存在或无效的警报时,Selenium可能会产生此类异常。对此,我建议开发者使用显式、或适当的等待时间,来处理浏览器的各类警报。倘若仍然等不到警报的话,catch块可以捕获该异常。例如:   try {   driver.switchTo().alert().accept(); } catch(NoSuchAlertException e){   System.out.println(“WebDriver couldn"t locate the Alert”); }    4. ElementNotVisibleException   该异常被定义为ElementNotInteractableException类的子类。当WebDriver尝试着对不可见的元素、或不可交互的元素执行各项操作时,Selenium可能会产生此类异常。对此,我建议开发者在的确需要之处,让Selenium进行适当的超时等待。例如:   try { driver.findElement(By.id("form-save")).click(); } catch(ElementNotVisibleException e){   System.out.println(“WebDriver couldn"t locate the element”); }   5. ElementNotSelectableException   该异常属于InvalidElementStateException类的子类。在Selenium中,ElementNotSelectableException表明某个元素虽然存在于网页上,但是无法被WebDriver所选择。   catch块不但可以处理Selenium中的此类异常,而且可以使用相同或不同的 技术 ,重新选择相同的元素。例如:   try {   Select dropdown = new Select(driver.findElement(By.id(“swift”))); } catch(ElementNotSelectableException e){   System.out.println("Element could not be selected")}    6. NoSuchSessionException   Selenium通过driver.quit()命令退出自动化的浏览器会话后,以及在调用某个测试方法时,会产生此类异常。当然,如果浏览器崩溃或出现断网,该异常也可能会发生。为了避免出现NoSuchSessionException,我们可以在测试套件结束时,退出浏览器,并确保用于 自动化测试 的浏览器版本的稳定性。例如:   private WebDriver driver;   @BeforeSuite   public void setUp(){ driver = new ChromeDriver(); }   @AfterSuite   public void tearDown(){ driver.quit(); }    7. StaleElementReferenceException   当DOM中不再存在程序所需的元素时,Selenium将抛出StaleElementReferenceException。当然,如果DOM未能被正确加载、或WebDriver被卡在错误的页面上时,也可能会产生这种异常。对此,您可以使用catch块捕获该异常,并且使用动态的XPath、或尝试着重新刷新页面。例如:   try { driver.findElement(By.xpath(“//*[contains(@id,firstname")]”)).sendKeys(“Aaron”);   } catch(StaleElementReferenceException e){   System.out.println("Could not interact with a desired element")}   8. TimeoutException   当WebDriver超过了执行下一步的等待时限时,Selenium中可能会产生此类异常。Selenium的各种等待通常被用于避免出现ElementNotVisibleException之类的异常。不过,即使在使用了适当的等待之后,如果元素仍然不可交互,那么TimeoutException也会被抛出。为此,我们必须通过执行手动测试,来检验元素的延时性,以便采取进一步的处理等待。    9. InvalidSelectorException   当使用无效的或不正确的选择器时,Selenium中会抛出此类异常。当然,类似情况也可能发生在创建XPATH时。对此,我们需要在将代码推送到主分支之前,检查测试脚本,并测试脚本的端到端流程。此外,SelectorHub和ChroPath等工具,也可以被用于验证定位器。    10. NoSuchFrameException   NoSuchFrameException属于NotFoundException类的子类。当WebDriver尝试着切换到当前网页上无效的、或不存在的框架时,Selenium可能会产生此类异常。为此,我们需要首先确保框架的名称或id是正确的;其次,应确保框架的加载不会过于消耗时间。当然,如果在网页上加载框架的确非常耗时的话,则需要修正相应的等待处理。例如:   try {   driver.switchTo().frame("frame_1"); } catch(NoSuchFrameException e){   System.out.println("Could not find the desired frame")   }   小结   综上所述,为了适应各种场景,异常处理对于任何自动化脚本和逻辑结构都是至关重要的。请您务必在了解每个异常特征的基础上,有选择性地在自动化脚本中使用上述十种有关Selenium的常用异常处理命令。

selenium和webdriver的区别

我们平时所说的selenium说的都是selenium1(有名Selenium RC),他曾经有个非常强的竞争对手就是Webdriver,后来Selenium团队发布了Selenium2。Selenium2= Selenium1+webdriver,这样的组合使Selenium的功能增强了n倍,用户也可以很自由的选择自己喜欢的工具。2、 什么是Webdriver?WebDriver是一个用来进行复杂重复的web自动化测试的工具。意在提供一种比Selenium1.0更简单易学,有利于维护的API。它没有和任何测试框架进行绑定,所以他可以很好的在单元测试和main方法中调用。一旦创建好一个Selenium工程,你马上会发现WebDriver和其他类库一样:它是完全独立的,你可以直接使用而不需要考虑其他配置,这个Selenium RC是截然相反的。

自动化测试:Selenium高级操作

本章节主要内容: switch_to适用场景: 处理JS弹框 切换frame 切换浏览器窗口   Switch_to处理JS弹框 JavaScript简称JS,应用于HTML网页,通过操纵网页窗口及网页元素,从而实现动态效果。 JS弹框类型:警告框alert、确认框confirm、提示框prompt   浏览器窗口中如果有JavaScript的弹出框,需要通过switch_to语句处理。 相关方法: Switch_to切换窗口 浏览器中有多个窗口时,如果想切换到其他窗口操作,需要调用switch_to方法 切换到目标窗口: 相关方法: 示例: Switch_to切换frame 如果元素在html的frame或iframe中,则无法直接定位到元素。需要先切换到该frame中,再进行定位及其他操作。 相关方法: 一般来说我们与页面的交互可以使用WebElement的方法来进行点击等操作。但是有时候我们需要一些更复杂的动作,就需要用到我们的Action Chains了。 通过action对象模拟鼠标操作,如双击,右击,拖拽,悬停等操作: 普通键: 有名按键:   无名按键:a-z,0-9   修饰键: 修饰键单独使用没有意义,一般和别的按键配合使用。 Actions操作: 使用示例 输入大写或按键上方的字符: JS,JavaScript的简称,广泛用于HTML网页,通过操纵网页窗口及网页元素,从而实现动态效果。 webdriver无法完成的操作,可以由JS配合完成。 示例: 参考JS: 获取标题:document.title 弹出提示框:alert("我是一个弹框"); 改变元素属性:q=document.getElementById("kw");q.style.display="block";   Selenium-JS处理滚动条 通过js实现滚动条拖动效果: 移动元素到窗口顶部: 移动元素到窗口底部: 窗口移动指定距离: 移动窗口到某位置: input标签上传:借用input元素的sendkeys方法实现 示例: 非input标签上传---借用其他工具如autoIt: u2022 用于Windows GUI自动化操作 u2022 通过它可以组合使用模拟键击、鼠标移动和窗口/控件操作等来实现自动化任务。 u2022 它使用类似BASIC的脚本语言。 u2022 可以通过转换工具把脚本转换为exe文件 应用程序从安全考虑,都在登录或某操作节点使用验证码。 验证码是一种区分用户是计算机还是人的公共全自动程序。 自动化时验证码处理方式: cookie的操作: Selenium-截图操作 截图:

python selenium模块使用出错,这个怎么改

1. selenium 3.x开始,webdriver/firefox/webdriver.py的__init__中,executable_path="geckodriver";而2.x是executable_path="wires"2. firefox 47以上版本,需要下载第三方driver,即geckodriver;在http://docs.seleniumhq.org/download/的Third Party Drivers, Bindings, and Plugins下面找到Mozilla GeckoDriver,下载到任意电脑任意目录,解压后将该路径加入到PC的path(针对windows)即可。

UI自动化测试中,Selenium的三种等待方式详解

  背景   UI自动化过程中,必然会遇到加载问题、环境不稳定、网络慢的情况,如果不做任何处理就会因为没有找到元素而报错。   另外一种情况就是页面使用了ajax异步加载机制(现在都是resetful,客户端和服务端都是分离的),不知道页面是什么时候到达的。这时我们就要用到wait,而在 Selenium 中,我们一共有三种等待,分别是固定等待、隐式等待和显式等待。    time.sleep   固定等待,本质:让当前的线程睡眠,实质是线程的阻塞(blocking),用wait 方式实现。   缺点:网络条件好浪费时间,严重影响项目的性能。   好处:调试脚本可以用。   implicitly_wait   隐式等待,本质:在脚本的开始设置一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则可能抛出异常。隐式等待对整个driver周期都起作用,在最开始设置一次就可以了,不要当作固定等待使用。   缺点:JavaScript一般都是放在我们的body的最后进行加载,实际这时页面的元素都已经加载完毕,我们却还在等待全部页面加载结束。    WebDriverWait   显式等待,本质:动态的等待,判断某一个元素是不是已经出现了,比如title是不是叫 百度 或百度搜索,根据动态的一些条件来轮询,它会不停的轮询去给我们检测,条件是成功还是失败,比如0.5s就检测一次这个元素在这个条件下是成功还是失败。同时设置轮询的超时时间。   如果同时设置了显式等待和隐式等待,就看谁设置的等待时间长,谁的超时等待时间长,就用谁的执行。    显式等待   模块   from selenium.webdriver.support.wait import WebDriverWait    WebDriverWait 的源码 # Licensed to the Software Freedom Conservancy (SFC) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The SFC licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. import time from selenium.common.exceptions import NoSuchElementException from selenium.common.exceptions import TimeoutException POLL_FREQUENCY = 0.5 # How long to sleep inbetween calls to the method IGNORED_EXCEPTIONS = (NoSuchElementException,) # exceptions ignored during calls to the method class WebDriverWait(object): def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None): """Constructor, takes a WebDriver instance and timeout in seconds. :Args: - driver - Instance of WebDriver (Ie, Firefox, Chrome or Remote) - timeout - Number of seconds before timing out - poll_frequency - sleep interval between calls By default, it is 0.5 second. - ignored_exceptions - iterable structure of exception classes ignored during calls. By default, it contains NoSuchElementException only. Example: from selenium.webdriver.support.ui import WebDriverWait element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("someId")) is_disappeared = WebDriverWait(driver, 30, 1, (ElementNotVisibleException)). until_not(lambda x: x.find_element_by_id("someId").is_displayed()) """ self._driver = driver self._timeout = timeout self._poll = poll_frequency # avoid the pide by zero if self._poll == 0: self._poll = POLL_FREQUENCY exceptions = list(IGNORED_EXCEPTIONS) if ignored_exceptions is not None: try: exceptions.extend(iter(ignored_exceptions)) except TypeError: # ignored_exceptions is not iterable exceptions.append(ignored_exceptions) self._ignored_exceptions = tuple(exceptions) def __repr__(self): return "".format( type(self), self._driver.session_id) def until(self, method, message=""): """Calls the method provided with the driver as an argument until the return value is not False.""" screen = None stacktrace = None end_time = time.time() + self._timeout while True: try: value = method(self._driver) if value: return value except self._ignored_exceptions as exc: screen = getattr(exc, "screen", None) stacktrace = getattr(exc, "stacktrace", None) time.sleep(self._poll) if time.time() > end_time: break raise TimeoutException(message, screen, stacktrace) def until_not(self, method, message=""): """Calls the method provided with the driver as an argument until the return value is False.""" end_time = time.time() + self._timeout while True: try: value = method(self._driver) if not value: return value except self._ignored_exceptions: return True time.sleep(self._poll) if time.time() > end_time: break raise TimeoutException(message)   参数:    三种等待方式的实例 from selenium import webdriver from time import sleep from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 三种等待方法 class TestCase(object): def __init__(self): self.driver = webdriver.Chrome() self.driver.get("https://www.baidu.com") sleep(2) def test_sleep(self): self.driver.find_element_by_id("kw").send_keys("selenium") sleep(2) # 线程的阻塞 blocking wait 方式实现 self.driver.find_element_by_id("su").click() sleep(3) self.driver.quit() def time_implicitly(self): self.driver.implicitly_wait(10) self.driver.find_element_by_id("kw").send_keys("webdriver") self.driver.find_element_by_id("su").click() # sleep(2) self.driver.quit() def time_wait(self): wait = WebDriverWait(self.driver,2,0.5) wait.until(EC.title_is("百度一下,你就知道")) self.driver.find_element_by_id("kw").send_keys("webdriver") self.driver.find_element_by_id("su").click() sleep(2) self.driver.quit() if __name__=="__main__": case = TestCase() # case.test_sleep() # case.time_implicitly() case.time_wait()

Selenium那么多版本怎么选用?

现在直接使用3.0版本即可,几乎可以满足所有的web页面自动化需求。其他的版本已经没有了研究的意义

selenium ide怎么用

Selenium IDE是Firefox的一个插件,其主要功能是录制操作、回放操作、导出脚本。具体使用方法如下:一、安装Selenium IDE首先,下载Firefox;然后,在Firefox中安装Selenium IDE插件;二、录制首先启动Firefox;点击菜单栏中的工具->Selenium IDE点击红色的录制按钮之后在浏览器中做的操作就录制下来了三、回放点击像播放器一样的按钮即可四、导出脚本点击Selenium IDE 中file菜单,即可看到相关操作需要更详细的介绍,请点击Selenium IDE 中的帮助菜单。

如何在 Selenium 中操作 SPAN 元素

要点击一个 Menu 时需要对 SPAN 元素进行操作,后来在 Selenium 的论坛中找到了答案。示例代码如下:1 <tr>2 <td>click</td>3 <td>//span[contains(text(),"String")]</td>4 <td></td>5 </tr>在实际使用时,把 String 部分替换为实际的 text 就可以了。另外一种做法是不行的:1 <tr>2 <td>click</td>3 <td>//span[@text="String"]</td>4 <td></td>5 </tr>

selenium webdriver 执行测试常见问题

Web 应用程序的自动化测试如今,大多数的应用软件被写为基于 Web 的应用程序并通过浏览器展示给用户并与之进行交互。不同公司和机构组织都需要测试这些应用程序的有效性。在一个高度交互性和响应的软件流程时代,许多组织倾向于运用敏捷开发理论,自动化测试也就成了必备一项。所谓自动化测试,就是执行自动测试工具或者用某种程序设计语言编写程序,控制被测软件中的各种模块,模拟手动测试步骤,完成测试。测试自动化有很多优点,比如:频繁的回归测试、快速反馈给开发人员、几乎无限的重复测试用例的执行、支持敏捷和极端发展的方法、自定义的缺陷报告、不会错过人工手动测试可能遗漏的缺陷等。目前也有很多商业和开源的软件,可以辅助进行测试自动化的开发。Selenium 应该是应用最为广泛的开源解决方案。Selenium 概述Selenium 是一个用于 Web 应用程序测试的工具,Selenium 测试直接自动运行在浏览器中,就像真正的用户在手工操作一样。支持的浏览器包括 IE、Chrome 和 Firefox 等。这个工具的主要功能包括:测试与浏览器的兼容性 - 测试您的应用程序看是否能够很好地工作在不同浏览器和操作系统之上;测试系统功能 - 创建回归测试检验软件功能和用户需求;支持自动录制动作,和自动生成 .NET、Perl、Python、Ruby 和 Java 等不同语言的测试脚本。Selenium 是 ThoughtWorks 专门为 Web 应用程序编写的一个验收测试工具。Selenium 2.0 与以往版本的区别Selenium 2.0(又名 Selenium WebDriver)的主要新功能是集成了 WebDriver。WebDriver 曾经是 Selenium 1(又名 Selenium RC)的竞争对手。Selenium RC 在浏览器中运行 JavaScript 应用,而 WebDriver 通过原生浏览器支持或者浏览器扩展直接控制浏览器。从 Selenium 项目简史中可以了解到,Selenium 和 WebDriver 的开发人员都认为两个工具各有优势,二者合并将创造更强大的 Web 测试框架。 Selenium 1 是一款流行和完善的测试框架,支持众多浏览器(因其 JavaScript 实现),允许用户通过许多编程语言(从 Java/C# 到 PHP、Erlang...),而 WebDriver 则弥补了 Selenium 1 的缺点,跳出了 JavaScript 的沙箱,提供快速、轻量级的浏览器模拟器。之所以合并,原因如下:1、WebDriver 解决了 Selenium 存在的缺点(比如,绕过 JS 沙箱);2、Selenium 解决了 WebDriver 存在的问题(例如支持广泛的浏览器);3、Selenium 的主要贡献者们都觉得合并项目是为用户提供最优秀框架的最佳途径。Selenium 2.0 还包括 Selenium Server,通过 Selenium Grid 支持分布式测试。新的 Selenium Grid 支持使用原来的 Selenium RC API 和 WebDriver API 测试。Selenium IDE 1.1.0 也将支持 WebDriver API,包括将录制生成的测试用例导出为 WebDriver 所支持的各种编程语言(Ruby、Python、C# 和 Java)。WebDriver 针对各个浏览器而开发,取代了 Selenium RC 中嵌入到被测 Web 应用中的 JavaScript,与浏览器的紧密集成可以支持创建更高级的测试,且避免了 JavaScript 安全模型导致的限制。除了来自浏览器厂商的支持,WebDriver 还利用操作系统级的调用模拟用户输入。WebDriver 支持 Firefox (FirefoxDriver)、IE (InternetExplorerDriver)、Opera (OperaDriver) 和 Chrome (ChromeDriver)。它还支持 Android (AndroidDriver) 和 iPhone (IPhoneDriver) 的移动应用测试。此外,还包括一个基于 HtmlUnit 的无界面实现,即 HtmlUnitDriver。WebDriver API 可以通过 Python、Ruby、Java 和 C# 访问,支持开发人员使用他们偏爱的编程语言来创建测试。

Test Complete和Selenium的区别?优缺点有哪些?

TestComplete是AutomatedQA公司开发的一套支持自动测试软件的工具, TestComplete支持的测试类型·单元测试/·功能测试/·回归测试/·分布式测试/·数据驱动测试/·HTTP负载测试/·Web测试/·人工测试而Selenium是ThoughtWorks专门为Web应用程序编写的一个验收测试工具。主要用于Web应用程序测试. Selenium主要特点是: # 支持不同浏览器运行: 测试是直接在浏览器中运行,就像真实用户所做的一样,从终端用户的角度测试应用程序。 # 使浏览器兼容性测试自动化成为可能。 # 使用简单,可生成多种语言的用例脚本。

selenium怎么调用执行这两个js函数

* 回复内容中包含的链接未经审核,可能存在风险,暂不予完整展示! 调用js方法execute_script(script, *args)在当前窗口/框架 同步执行javaScript脚本:JavaScript的执行。*参数:适用任何JavaScript脚本。使用:driver.execute_script(‘document.title")使快播登陆用户名输入框标红显示:#coding=utf-8from selenium import webdriverimport timedriver = webdriver.Firefox()driver.get("http://passport.k****.com/login/?referrer=http%3A%2F%2Fvod.k****.com%2F%3Ft%3Dhome")#给用户名的输入框标红js="var q=document.getElementById("user_name");q.style.border="1px solid red";"#调用jsdriver.execute_script(js)time.sleep(3)driver.find_element_by_id("user_name").send_keys("username")driver.find_element_by_id("user_pwd").send_keys("password")driver.find_element_by_id("dl_an_submit").click()time.sleep(3)driver.quit()js解释:q=document.getElementById("user_name")元素q的id 为user_nameq.style.border="1px solid red元素q的样式,边框为1个像素红色隐藏元素js.html<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8" /><title>js</title><script type="text/javascript" async="" src="http://ajax.g********.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script><link href="http://netdna.b**********.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" /><script type="text/javascript">$(document).ready(function(){$("#tooltip").tooltip({"placement": "right"});});</script></head><body><h3>js</h3><div class="row-fluid"><div class="span6 well"><a id="tooltip" href="#" data-toggle="tooltip" title=" selenium-webdriver(python)">hover to see tooltip</a><a class="btn">Button</a></div></div></body><script src="http://netdna.b**********.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script></html>查看本栏目更多精彩内容:http://www.b******.cn/Programming/extra/(保持html文件与执行脚本在同一目录下)执行js一般有两种场景:一种是在页面上直接执行JS另一种是在某个已经定位的元素上执行JS#coding=utf-8from selenium import webdriver import time,osdriver = webdriver.Firefox()file_path = "file:///" + os.path.abspath("js.html")driver.get(file_path)#######通过JS 隐藏选中的元素##########第一种方法:driver.execute_script("$("#tooltip").fadeOut();")time.sleep(5)#第二种方法:button = driver.find_element_by_class_name("btn")driver.execute_script("$(arguments[0]).fadeOut()",button)time.sleep(5)driver.quit()js解释:arguments对象,它是调用对象的一个特殊属性,用来引用Arguments对象。Arugments对象就像数组。fadeOut() 方法使用淡出效果来隐藏被选元素,假如该元素是隐藏的。

如何用python和selenium写自动化脚本语言

一开始,基本上很多人都是用selenium IDE录制脚本开始的,我也是!有一本书写得很不错:selenium初学者指南!So,从录制回放开始我的selenium,而在这个过程中,不断地去补充我的html css知识,熟悉selenium的api!慢慢地,发现录制的脚本在回放的时候经常报错,通过检查发现,是定位上的错误,导致这种定位的错误的最大原因是系统前端采用了某种框架,如tigerUI,exj....所以HTML里面的标签很多都是动态的,比如id,class,name!这对selenium操作定位的元素而进行自动化来说是致命伤!所以,开始自己写定位信息,这已经是必须的了!从而学习了xpth和css选择器,掌握了更加有效,快速和稳定地定位页面上的元素(定位的时候难免会碰到有iframe,这就得先切换到iframe中再进行定位了)!也就是,在selenium IDE上写脚本!信心满满地在selenium IDE上写了长长地一段脚本,并且反复跑都能成功!总算尝到了一点点幸福的滋味!然后呢,问题来了,当我要修改和扩展这段的脚本的时候,才发现这效率是相当地低!一句句查!一句句改!多么痛的领悟!另外,selenium IDE 默认启动的是火狐,在使用selenium RC 启动 IE 进行跑脚本时浏览器总是会报错!各种搞不定,各种不淡定!决定放弃使用IDE!selenium有一个强大之处就是支持多种语方:java,C#,python等等,并且可以把录制的脚本转换成代码!我用的是java,果断走起!不用说,当然是把脚本转为java代码了,在E www.hbbz08.com clipse中重新开始搞!选择一个测试框架:有Junit和TestNg两个选择,公司用的是junit,所以,不用多说,我就用junit验证selenium脚本的运行结果!并且,Junit和TestNG都可以生成比较直观的测试报告!写好一些代码,会看到整段代码中密密麻麻充斥着基本相同的代码:开始封装代码!把常用到API封装起来!封装好之后代码看着就舒服多了!接下来,是不是也应该把代码中的定位信息用一个专门的文件放起来,再去读取里面的定位信息,这样,维护代码和维护定位信息就放在了两个地方,不用老是扎在代码和定位路径中,简单地分一下层!果断尝试!

Python selenium 如何循环点击标签

解决办法:使用selenium.webdriver.remote.webelement.WebElement提供的get_attribute方法。通过get_attribute拿到该a标签的各种属性,通过判断找到符合要求的元素进行点击。get_attribute("href") 得到a标签对应的目标页面的URL,对URL进行判断就可以了解到该页面是否站内页面。我们可以知道,如果是站内页面的话这个属性一般会是一个相对路径,或者包含了本站域名,但如果是站外页面的话,那它一定是包含了“http”的一个url。get_attribute("target")如果target不是"_blank"的话,可以判断该页面是在本窗口跳转的。

Selenium的组件

Selenium IDE:一个Firefox插件,可以录制用户的基本操作,生成测试用例。随后可以运行这些测试用例在浏览器里回放,可将测试用例转换为其他语言的自动化脚本。 Selenium Remote Control (RC) :支持多种平台(Windows,Linux,Solaris)和多种浏览器(IE,Firefox,Opera,Safari),可以用多种语言(Java,Ruby,Python,Perl,PHP,C#)编写测试用例。 Selenium Grid :允许Selenium-RC 针对规模庞大的测试案例集或者需要在不同环境中运行的测试案例集进行扩展。

怎样开始用selenium进行自动化测试?

作为一个之前没接触过selenium的新手来说,如果之前有过写代码的经验,那么学习起来就会更加快速!但无论如何,开始总是比较难的!我也是从一个接近纯24K小白成长起来的,一步一个脚印,在这个过程中我学习到了很多新的知识,有了新的突破,新的成长,不断地努力,不断地尝试,不断地总结经验,让我一直走到了今天,未来,还有很多路要走!义无反顾,我的测试之路!所以,今天抽空回顾一下我的selenium学习过程,也就是,selenium自动化测试怎么开始,这些,是我的个人经验,分享出来给大家参考!一开始,基本上很多人都是用selenium IDE录制脚本开始的,我也是!有一本书写得很不错:selenium初学者指南!So,从录制回放开始我的selenium,而在这个过程中,不断地去补充我的html css知识,熟悉selenium的api!慢慢地,发现录制的脚本在回放的时候经常报错,通过检查发现,是定位上的错误,导致这种定位的错误的最大原因是系统前端采用了某种框架,如tigerUI,exj....所以HTML里面的标签很多都是动态的,比如id,class,name!这对selenium操作定位的元素而进行自动化来说是致命伤!所以,开始自己写定位信息,这已经是必须的了!从而学习了xpth和css选择器,掌握了更加有效,快速和稳定地定位页面上的元素(定位的时候难免会碰到有iframe,这就得先切换到iframe中再进行定位了)!也就是,在selenium IDE上写脚本!信心满满地在selenium IDE上写了长长地一段脚本,并且反复跑都能成功!总算尝到了一点点幸福的滋味!然后呢,问题来了,当我要修改和扩展这段的脚本的时候,才发现这效率是相当地低!一句句查!一句句改!多么痛的领悟!另外,selenium IDE 默认启动的是火狐,在使用selenium RC 启动 IE 进行跑脚本时浏览器总是会报错!各种搞不定,各种不淡定!决定放弃使用IDE!selenium有一个强大之处就是支持多种语方:java,C#,python等等,并且可以把录制的脚本转换成代码!我用的是java,果断走起!不用说,当然是把脚本转为java代码了,在Eclipse中重新开始搞!选择一个测试框架:有Junit和TestNg两个选择,公司用的是junit,所以,不用多说,我就用junit验证selenium脚本的运行结果!并且,Junit和TestNG都可以生成比较直观的测试报告!写好一些代码,会看到整段代码中密密麻麻充斥着基本相同的代码:开始封装代码!把常用到API封装起来!封装好之后代码看着就舒服多了!接下来,是不是也应该把代码中的定位信息用一个专门的文件放起来,再去读取里面的定位信息,这样,维护代码和维护定位信息就放在了两个地方,不用老是扎在代码和定位路径中,简单地分一下层!果断尝试!到这里,脚本写出来了,常用的api封装起来了,定位路径分离出来了!整个代码简洁多了!写起来容易和舒服多了!这时候,该个性化定制一下自己的框架了,这里,就暂时不写下去了,已经离怎样开始selenium挺远的了!或许,到了这一步,你早就有自己对测试框架的想法和对脚本的设计方法了。。。。加油吧,把想法化为实际的动力,继续向前!

熟练掌握Selenium工具核心功能总纲(二)

举一反三:   那么下拉框如何定位页面元素呢?dom示例:                           那么定位去操作它的方法,也应该同多选框操作一直:   @Test   void test_select() throws InterruptedException {    WebElement element = driver.findElement(By.id("fruitselect"));    Select select = new Select(element);    // 下面根据不同方法选择下拉框的值    Thread.sleep(2000);    select.selectByIndex(2);    Thread.sleep(2000);    select.selectByValue("orange");    Thread.sleep(2000);    select.selectByVisibleText(" 苹果 ");    // 遍历集合打印下拉框的所有值    List options = select.getOptions();    for (WebElement option : options) {    System.out.println("输出单选值:"+option.getText());    }   }   8、掌握alert、confirm、prompt三种弹框处理;这三种弹窗的处理方式不出意外都是Alert类来处理。   9、 selenium 三种等待方式的原理及使用场景:强制等待、隐式等待、显示等待;时间同步机制。   10、selenium等待条件,isEnabled()isSelected()源码分析:   比如在某些场景中,需要等待元素出现后才能操作它,这时需要的是等待,至于是哪种等待呢?需要结合实际场景来分析:   // 下面这个操作是先找元素,是否现实,这里有一个条件即使是隐藏元素,它还是存在dom中,而有些隐藏是不一定会存在dom,那么查找元素是会报异常:NoSuchElementException    @Test   public void test_display() throws InterruptedException {    WebElement el = driver.findElement(By.id("displayed-text"));    System.out.println("判断输入框是否显示:" + el.isDisplayed());    if (el.isDisplayed()) {    el.sendKeys("displayed");    System.out.println("点击隐藏按钮,元素被隐藏");    driver.findElement(By.id("hide-textbox")).click();    }    Thread.sleep(3000);    WebElement ele = driver.findElement(By.id("displayed-text"));    // 因为知道上面的操作是默认显示,并且输入值,if判断为true表示显示,然后输入文本内容并点击隐藏    if (!ele.isDisplayed()) {    // 如果是隐藏的,下面操作显示并输入内容    driver.findElement(By.id("show-textbox")).click();    System.out.println("点击显示按钮,元素被显示");    ele.sendKeys("+再次打开");    }    Thread.sleep(3000);    // 然后再次隐藏    driver.findElement(By.id("hide-textbox")).click();   }   tips:元素的操作,判断状态:isEnabled,判断显示:isDisplayed,判断是否可选:isSelected   11、鼠标操作:单击、双击、右击、键盘输入及组合键的应用;前提是前端开发支持按键操作。   在 web 自动化中,所有键盘操作不一定是支持的,需要前端开发支持。   import org.openqa.selenium.Keys;// 这个是selenium框架的关键类   // 发送单个按键操作,element的sendKeys()方法即可   findElement(By.id("kw")).sendKeys(Keys.ENTER);   // 如果是组合键,例如control+a   String select=Keys.chord(Keys.CONTROL,"a");   findElement(By.id("kw")).sendKeys(select);   // 使用Actions类处理按键操作   import org.openqa.selenium.interactions.Actions;   Actions action = new Actions(driver);   action.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).perform();   12、需要掌握执行JavaScript的方法和技巧,JavascriptExecutor类:   import org.openqa.selenium.JavascriptExecutor;   import org.openqa.selenium.chrome.ChromeDriver;   System.setProperty("webdriver.chrome.driver","drivers/chromedriver.exe");   driver = new ChromeDriver();   // 下行强制转换   JavascriptExecutor js=(JavascriptExecutor) driver;   13、屏幕截图:实现截屏及日期格式保存图片   思考:会写在哪个位置?   通常使用TestNG/junit测试框架,会使用@After注解,也就是说在每个 测试 用例执行完才截图,而不是一个测试类执行完才截图,那么就需要对执行的结果进行断言,错误才截图,而不是随意截图。   优先封装一个生成文件名的方法:   /**    * 获取随机字符串作为文件名的长度    * @param length    * @return    */   public static String getRandomString(int length) {    StringBuilder sb = new StringBuilder();    String characters = "1234567890qwertyuioplkjhgfdsazxcvbnmPOIUYTREWQASDFGHJKLMNBVCXZ";    for (int i = 0; i < length; i++) {    int index = (int) (Math.random() * characters.length());    sb.append(index);    }    return sb.toString();   }

Selenium的优势

据 Selenium 主页所说,与其他测试工具相比,使用 Selenium 的最大好处是:Selenium 测试直接在浏览器中运行,就像真实用户所做的一样。Selenium 测试可以在 Windows、Linux 和 Macintosh上的 Internet Explorer、Mozilla 和 Firefox 中运行。其他测试工具都不能覆盖如此多的平台。使用 Selenium 和在浏览器中运行测试还有很多其他好处。下面是主要的两大好处:通过编写模仿用户操作的 Selenium 测试脚本,可以从终端用户的角度来测试应用程序。通过在不同浏览器中运行测试,更容易发现浏览器的不兼容性。Selenium 的核心,也称browser bot,是用 JavaScript 编写的。这使得测试脚本可以在受支持的浏览器中运行。browser bot 负责执行从测试脚本接收到的命令,测试脚本要么是用 HTML 的表布局编写的,要么是使用一种受支持的编程语言编写的。Selenium 适用于以下浏览器: Browser Selenium IDE Selenium Remote Control Selenium Core Selenium 2/Webdriver API Firefox 10 Record and playback tests Start browser, run tests Run tests Run tests Firefox 9 Record and playback tests Start browser, run tests Run tests Run tests Firefox 8 Record and playback tests Start browser, run tests Run tests Run tests Firefox 7 Record and playback tests Start browser, run tests Run tests Run tests Firefox 6 Record and playback tests Start browser, run tests Run tests Run tests Firefox 5 Record and playback tests Start browser, run tests Run tests Run tests Firefox 4 Record and playback tests Start browser, run tests Run tests Run tests Firefox 3.6 Record and playback tests Start browser, run tests Run tests Run tests Firefox 3 Record and playback tests Start browser, run tests Run tests not supported IE 9 not supported Start browser, run tests Run tests Run tests IE 8 not supported Start browser, run tests Run tests Run tests IE 7 not supported Start browser, run tests Run tests Run tests Safari 3 not supported Start browser, run tests Run tests not supported Safari 2 not supported Start browser, run tests Run tests not supported Opera 9 not supported Start browser, run tests Run tests Run tests Opera 8 not supported Start browser, run tests Run tests Run tests Chrome not supported Start browser, run tests*** Run tests*** Run tests*** Others not supported Partial support possible* Run tests** not supported

selenium测试到底是测试什么的?

是用来测试手工任务的功能的,但是手工测试这些任务可能很花时间,并且容易出现人为的错误。在本文中,作者为架构师、开发人员和测试人员展示了如何使用 Selenium 测试工具来自动化验收测试。通过自动化测试,可以节省时间,并消除测试人员所犯的错误。文中还给出了一个例子,以演示如何将 Selenium 应用到现实中使用 Ruby on Rails 和 Ajax 的项目上。http://www.ibm.com/developerworks/cn/java/wa-selenium-ajax/

selenium通过人机验证爬虫

之前在学校曾经用过request+xpath的方法做过一些爬虫脚本来玩,从ios正式转前端之后,出于兴趣,我对爬虫和反爬虫又做了一些了解,然后发现了selenium这个神器。selenium原本是一款测试工具,但由于他可以较好的模拟浏览器的各种操作,完全无视对于user-agent的限制,所以现在被更多的用于爬虫脚本中。这里记录一下借助selenium库进行爬虫时碰到的一些问题以及解决方法。(拒绝恶意爬虫从我做起) selenium的安装不多说, pip install selenium就行。不过要注意自己的python版本,要是3.x才行。用它打开浏览器,然后通过dom操作获取需要的dom节点。 如果需要登录的,也可以事先将账号密码写好,然后用send_keys方法进行自动输入。 然后需要什么就直接通过dom方法来获取。不过现在很多网站的url有防爬处理,使用了不规律的url,无法像豆瓣排行榜那样直接遍历。但这个不难,用selenium就是要模拟人的操作的,真人操作的时候也不会直接输url来一页一页看,比如在线阅读的网站,一般都会有个目录页。先爬取目录页面的信息,先将正文url列表保存下来,然后再遍历列表就行。 这里有个sleep,目的是是确保目录页能完全加载完。当然这个方法有点蠢,后面我使用了不同的方法来做页面加载完成的判断。 页面加载完成需要时间,一定要等页面加载好了才能获取页面元素。而直接设置一个固定的sleep显然是效率极低且容易出错的。这里有几种不同的方法来自动判断页面加载的情况。 监视我最终需要的元素有没有加载完成,加载完成了就开始后续操作。比如我要的dom节点有一个类名为"page-content",并且在整个页面中一共有两处,而我需要的是第二处。那就可以监视这个节点的加载情况。 这里设置了0.5秒的刷新周期,当然可以设置的更短,然后设置了10秒的timeout,超时自动打开下一章。 这就很简单了,就一句话,最多等10秒,进行下一步。要是提前加载完就提前进行。这个方便是方便,但是不好用,他会等页面完全加载完才进行下一步,而事实上我只需要等正文加载完就行,所以效率上要差一点。 显性等待的好处就是可以在我需要的元素加载完的时候就进入下一步,获取元素内容,但是也有不好的地方,那就是还不够灵活。显性等待在超时的时候会抛出TimeoutException异常,在暴露的接口中没有给我定义异常处理的地方,这也是我选择自己实现一遍等待机制的原因,这样我可以对超时的异常进行处理。 很多时候,我们会发现,在登录账号时,系统会要我们输入验证码。如果想要让脚本自动识别验证码,可能就涉及到图像识别技术,还有一些第三方的服务可以使用,也是可行的。 但有的时候,网站会使用更为复杂的人机验证。比如这样的:

selenium是什么意思

selenium的意思是硒。基本信息1、CAS号:7782-49-2E。2、INECS号: 231-957-4。3、元素名称:硒。4、中文读音:xī。5、元素符号:Se。6、元素英文名称:Selenium。7、元素类型:非金属元素。8、硒元素(元素符号为Se)的原子序数为34,位于元素周期表的第4周期VIA族。8、原子体积(立方厘米/摩尔):164.5 立方厘米/摩尔。9、元素在海水中的含量:(ppm)。10、太平洋表面 0.000000015 ppm。11、地壳中含量(ppm):0.05 ppm。12、自然环境中发现的最高含量(ppm):30000 ppm,属于ⅥA族元素。硒用作光敏材料、电解锰行业催化剂、动物体必需的营养元素和植物有益的营养元素。硒在自然界的存在方式分为两种:无机硒和植物活性硒。无机硒一般指亚硒酸钠和硒酸钠,金属矿藏的副产品中获得;后者是硒通过生物转化与氨基酸结合而成,一般以硒蛋氨酸的形式存在。

selenium怎么读 英语selenium怎么读

1、selenium英[su0259u02c8liu02d0niu0259m]美[su0259u02c8liu02d0niu0259m],n.硒(化学元素,用于制造电气设备和有色玻璃,人体缺此元素可致抑郁等病)。 2、[例句]Low levels of selenium have been linked to increased risk of developing more severe flu.缺硒与重感冒有关。

为什么demi出院后都没有提过miley,他们不是BFF吗?反而是经常提到selena这个感情从新变好的朋友。

支持miley~就是喜欢miley,搞不懂为什么selena就那么红!

跪求Selena Gomez的《Wolves》mp3,谢谢

有的。,看简介

求selena gomez的新单wolves百度云,谢谢了!

selenagomez的新单wolves百度云链接:https://pan.baidu.com/s/1Bdpmi9JuHU_DDWKlsqwLNw提取码:cbzd《Wolves》歌曲的制作人团队有赛琳娜·戈麦斯,阿里·坦波西,路易·贝尔,布莱恩·李,卡尔·罗森,Marshmello以及安德鲁·瓦特,该曲于2017年10月25日发行。

selenium 获取table中的元素。python

https://www.cnblogs.com/myron-1/p/4878144.html #获取table的行数 rowCount = len(driver.find_elements_by_xpath("//*[@id="list-table"]/tbody/tr")) #获取第三列的每一行的值 for i in range(2,rowCount): print driver.find_element_by_xpath("//*[@id="list-table"]/tbody/tr[%s]/td[3]"%(i)).text

Selena Gomez - Bang a Drum的歌词

You caught my eye and I"m tryin" to holler at "chaYou"re walkin" by and I trip on the furnitureI"m on a ride that won"t stop movin"And I don"t know exactly what I"m doin"I see you shake, shake and I"m spinnin"It"s like I won the race, yeah I"m winningI"m all dizzy when you"re here with meSo let"s bring the heat"Cause there ain"t nothing to it, just got to do itYou"ve got to own it, own itWelcome to the beat of your own drumAnd you got it like that, burn it up like thatWelcome to the beat of your own drumIf you got it like that, yeah, it"s hot like thatEh, eh, yeah, I"ll will make you say, eh, ehSo bang a drum, bang a drumYou got me floatin" ten feet off the groundIt"s like whoa, I"m not backin" downMy hearts pumpin" and it"s workin" over timeI got the crazy butterfliesWe"re doin" it right when we"re togetherWith you by my side it only gets betterYour on my team, we got it figured outIt"s you and me no doubtThere ain"t nothing to it, just got to do itYou"ve got to own it, own itWelcome to the beat of your own drumIf it"s hot like that, burn it up like that[From: http://www.elyrics.net/read/s/selena-gomez-lyrics/bang-a-drum-lyrics.html]Welcome to the beat, you gotta dip it down lowIf you got it like that, yeah, it"s hot like thatEh, eh, yeah, I"ll will make you say, eh, ehSo bang a drum, bang a drumYeah, bang a drum, turn it up, bang a drumYeah, bang a drum, turn it up, bang a drumYou caught my eye and I"m tryin" to holler at "chaYou"re walkin" by and I trip on the furnitureI"m on a ride that won"t stop movin"And I don"t know exactly what I"m doin"I see you shake, shake and I"m spinnin"It"s like I won the race, yeah I"m winningI"m all dizzy when you"re here with meSo let"s bring the heatThere ain"t nothing to it, bang a drumJust got to do it, bang a drumYou"ve got to own it, own itWelcome to the beat, you gotta dip it down lowIf you got it like that, burn it up like thatWelcome to the beat of your own drumIf you got it like that, yeah it"s hot like thatEh, eh, yeah, I"ll will make you say, eh, ehSo bang a drum, bang a drumYeah, bang a drum, turn it up, bang a drumYeah, bang a drum, turn it up, bang a drumBang a drum, turn it up, bang a drumYeah, bang a drum, turn it up, bang a drum

赛琳娜·戈麦斯(Selena Gomez)交过哪些男朋友?

justin bieber Nick Jonas、Taylor Lautner、David Henrie

selena gomez主演过的电影、电视剧

2008年是Selena高产的一年,分别主演了《Another Cinderella Story》(译名: 《灰姑娘之舞动奇迹》)和《Princess Protection Program》(译名: 《公主保护计划》) 及主演《Wizards of Waverly Place The Movie》(译名: 《少年魔法师电影: 神秘魔法石》)三部迪士尼原创电影。这在一定程度上更加扩大了Selena的知名度,在她的影视作品中我们可以看到这个女孩的演技正在不断的进步和成熟。而且她的声音非常特别,极易给人留下深刻印象。   Selena也从此真正开始了她的银幕之路,主演了电影《Ramona and Beezus》(蕾梦娜和姐姐), 《Monte Carlo》(蒙特卡洛)等。目前又接了一部新电影《13reason why》,在这部影片中Selena扮演的是一个原本阳光清纯后来因为13个理由自杀的加州高中女生,这对Selena会是一个全新的挑战。

selena gomez是个怎么样的人

首先最重要的是爱粉丝,她好几次给粉丝签名的时候都是签一个说一个谢谢! 其次她在娱乐圈很有人缘,justin说,sel总是能让她笑!taylor swift说,只有sel才能懂她demi说sel对她来说是最亲密的朋友,她爱她,sel是她见过最甜美的女孩!小狼taylor是sel的前男友,即使分手了可是她们关系还是很好! 而且,她还很孝顺!Selena的生活重心是她的家人和宗教信仰,她录每一集少年魔法师前都会祈祷!Sel和所有家人都相处融洽。她很喜欢和妈妈腻一起的,虽然自己可以开车却还是总让妈妈开车载她。俩人在一起就像姐妹一样。甚至首张专辑之所以叫 《Kiss & Tell》也是因为这首歌是妈妈最喜欢的。除了妈妈她与自己的亲生父亲也是一直保持密切联络。当然Sel和继父的感情也相当好,Selena说:我有两个爸爸很幸运。她也时常会和外婆视像通话,和爷爷在夜晚促膝谈心。Selena曾多次在不同访问中说自己最爱的地方是德州的家乡,而每次她要回家都异常开心,她是一个很孝顺很爱家的女孩。 最后,sel还是一个很率真的人!虽然sel常常在颁奖典礼上穿的很成熟,但是你会发现sel一般私底下都穿铅笔裤,平底鞋。还有sel很喜欢吃零食!一点不怕后果!她很喜欢笑,大部分照片都能看到她在笑,尤其是一些抓拍的照片,笑的更是肆无忌惮!她还是联合国儿童基金会有史以来最年轻的大使 !还参加过各种慈善活动sel还养了五只狗,都是她救养的狗! 以上是我的总结

selena gomez的the way I loved you 是自己写的吗。是写给谁的啊

thewayilovedyou不是Selena写的。应该有一个relatedto但是肯定不是Nick。给Nick的是Selena亲自写的词的Iwon"tapologize,一专就这一首歌是Selena参与制作的。二专不清楚,三专有whenthesungoesdown和outlaw是Selena写的,不好意思我只知道这些,希望能帮到你。

Selena Gomez是谁?!

Selena Marie Gomez美国艺人赛琳娜·戈麦斯[Selena Gomez]出生日期:1992年7月22日 562次关注美国童星与歌手。近来在迪士尼频道原创电视影集《少年魔法师》(Wizards of Waverly Place)当中演出艾莉丝·鲁索(Alex Russo)一角。赛琳娜同时也具歌手身份,曾为迪士尼唱片公司录制两首歌,也和同样演出《Barney&Friends》的影星黛咪·洛瓦特(Demi Lovato)合唱过数首歌。赛琳娜是独生女,出于于美国纽约市,成长于大草原城(Gr Prairie)。身份亦是演员的母亲曼迪·蒂菲(My Teefy)在16岁时生下她。 她于十岁时在迪士尼一个全国才艺比赛中被发掘,第一个角色也是十岁时于《Barney&Friends》饰演Gianna一角。2006年,她客串了《小查与寇弟的顶级生活》第二季(仲夏夜恶梦A Midsummers Nightmare)的一角,饰演小芬。2007年,她出现在《孟汉娜》第二季,饰演孟汉娜的劲敌蜜凯拉(Mikayla)。 近来,赛琳娜主演少年魔法师的艾莉丝,该剧于2007年10月在美国的迪士尼频道首播。而她也和朱儿希利(Drew Seeley)合作拍摄《灰姑娘的玻璃手机》(A Cinderella Story)的续集,名为《灰姑娘的歌舞情缘》(Another Cinderella Story),饰演主角Mary。 戈梅滋翻唱了迪士尼经典动画电影《101斑点狗》里的《坏女人库伊拉》(Cruella De Vil),收录于《101忠狗白金双碟典藏版》DVD和《Disney Mania 6》专辑中。 2008年,她在强纳斯兄弟的MV“Burnin Up”中,客串演出尼克的庞德女郎。 2009年9月29日发行她的首张专辑kiss&Tell 首周销售量66000张 第二波主打Naturally得到金曲 赛琳娜和同样演出《Barney Friends》的女星黛咪·洛瓦特(Demi Lovato)是好朋友,她们会自制影片上传到YouTube,其频道名称为“therealdemilovato”。当被问及何时成为朋友,黛咪回答:“当我让她坐在我外套上用我的蜡笔画画时(Barney试镜)赛琳娜也会和另一位演出少年魔法师的女星珍妮花·史东(Jennifer Stone)一起制作Youtube影片,她们的频道为SelGomez。赛琳娜和强纳斯兄弟一样右手无名指佩带贞洁戒(刻有True Love Waits)。 赛琳娜在走红初期盛传与强纳斯兄弟中的小弟尼克Nick Jonas的诽闻,事情爆发于两人同时于不同的美国谈话性节目谈及相同的恋爱经验(赛琳娜表示她曾在和一名男孩初次约会时跳舞,并对对方说"我从来不再第一次约会和对方亲吻",而对方表示自己"从来不遵守规定",并吻了自己。而Nick Jonas也以男生角度另一节目分享了相同的故事) 赛琳娜和尼克强纳斯从未承认两人的关系,但这起诽闻也引起了许多人的讨论,进而衍生了不少新闻,其中包括赛琳娜与尼克强纳斯的前女友,也同时是迪士尼旗下当红女星麦莉Miley Cyrus两人之间有不合的传言。 所获荣誉 2009年   第22届儿童选择奖(Kids Choice Awards): 我最喜爱电视剧女演员 (Wizards of Waverly Place)   年轻艺人奖(Young Artist Awards): 最佳女主角(迷你电影类) (Another Cinderella Story)   青少年选择奖(Teen Choice Awards): 夏日最佳电视女星 (Princess Protection Program)   青少年选择奖(Teen Choice Awards): 红地毯风向标女星   美国拉丁大奖(ALMA Awards): 最佳喜剧女演员 (Wizards of Waverly Place)   好莱坞时尚大奖(Hollywood Style Awards): 时尚女星 2010年   第23届儿童选择奖(Kids Choice Awards): 我最喜爱电视剧女演员 (Wizards of Waverly Place)   格雷丝女性大奖(Gracie Awards): 最佳新人奖(喜剧类) (Wizards of Waverly Place)

【Selena的读写日记】宅树懒的生活哲学:《明天再说吧》

故事似乎没有一个完整的结果,大树不知会不会被河狸砍下?河狸不知道一共听了几回精采的故事?但我们知道,作者似乎要读者偶而也要停下脚步,看看这世界小小的地方。你我就像是河狸,在快速转动的社会环境中,可能都忘了那些停歇在树上的小小惊奇。 第一眼看见《明天再说吧》时,立即被绘者凯丝.迪.吉可莫(Kris Di Giao)笔下的图牵引著。书中逗趣的图画,色彩协调,看了十分喜欢,忍不住盯着图画看,一页翻过一页。作者米歇尔.艾可菲(Michael Escoffier)以动物为主题,尤其以长相习性特殊的树懒做为主角,成功的吸引大小读者的目光。 selena提供 故事中有个凡事慢慢来,带有点「懒」字意味的树懒巴哥,他与「效率」沾不上边,对于团体生活不感兴趣,喜欢懒洋洋的窝在树上。在他的行事历里,永远都只有明天的行程。但当「明天」变成「今日」时,事情又拖到明日,这样日复一日的没有下文。作者巧妙的描述巴哥的「明天」是安静而且寂寞的。 selena提供 以现代语言来说,巴哥大概是就是「宅树懒」了。看到这里,我这个快拍子、行动派的人都忍不住想站起来说:「树懒,你快动起来!」 selena提供 终于有一天,懒洋洋的树懒心跳加快了,他的家园被讲求效率的河狸破坏了,那让他慵懒度日的家如今岌岌可危,非得拯救不可!于是,他告诉前来砍树的河狸,这棵树有多美好:雨季来时,蓝蛙会爬到树上,在叶子下蛋;有着保护色的竹节虫、长了大眼睛的蝴蝶、七彩羽毛的鸟……,巴哥津津乐道的描述著自己观察到的自然景象。原来,被冠上「懒惰」的树懒只是动作慢,他的双眼、双耳可没有闲著,许多画面都深刻烙印在脑海。

暮光之城中的狼人扮演者,Taylor 是不是和selena分手了?

SelenaGomezConfirmsSplittoTaylorLautnerDisneystarSelenaGomezsaysshe"snotdatingTaylorLautner--anymore。Lastweek,asourceclosetothe16-year-oldtoldUsmagazine.comthepair--whohadbeenspottedgettingcozyinVancouver--calleditquitsbecause"theyarejustreallybusy."selenagomez和taylorlautner分手迪斯尼明星,selenagomez正式她不再和taylor有男女朋友的关系。上个星期,一个媒体在加拿大的vancouver看到selena与taylor。他们分手了“我们就是太忙了”他们说。

Miley Cyrus 和 Selena的关系是怎样的?

Miley和Selena是因为Miley和她好友在自己YouTube上传了一段模仿Selena的视频,再加上媒体渲染,引起了两人关系有点僵,但两人受采访的时候Selena似乎说自己并不是很清楚什么的。(其实肯定是知道的,就是怕媒体多加渲染)麦莉和泰勒一直都是很要好的闺蜜,不会因为Joe关系不好的。就是和Jonas有关的话也是媒体自己硬要扯进来的...和亲讲个总的吧,大体上Miley和Taylor肯定是最好的,然后是Ashley(上面漏了个e)...再接下去就是Demi、Selena两人了,可能现在和Selena有点僵吧。但,麦莉和四人关系还是不错的,他们在twitter经常聊天。嗯,就是这样...
 1 2 3  下一页  尾页