1、封装一个函数,判断当前元素是否存在 from selenium.common.exceptions import NoSuchElementException def isElementExist(...,返回False return False else: # 没有发生异常,表示在页面中找到了该元素,返回True return True 2、通过...) 但事实上,上述方法selenium会报错,正确的应该为: href_answer = browser.find_element_by_xpath('//*[@id="1"]/h3/a') href_link...baidu_handle: result_handle = handle # 输出当前窗口句柄 browser.switch_to.window(result_handle) #在详情页中找结果...('best-text.mb-10') 6、通过find_element()方法获取元素 获取元素除了指定获取方式的方法,还有更灵活的方法 element = driver.find_element(by
方式一:利用jenkins分布式Master-slave来解决,selenium脚本不需要修改,环境部署好,可以直接跑 方式二:利用selenium grid分布式处理,这个有介绍过点击打开链接,剩下就是把...59、当定位策略都失败的时候,你该怎么做? 80%是你元素定位的不对,那么多定位方法,一个不行换另外一个,直接不能定位,先定位父元素,再循环找子元素。一般来说XPATH都能定位到,无非是可阅读性不强。...65、常见的定位方式? 66、上传图片的几种方式? 67、如何处理动态元素? 找父级元素,通过父级元素查找子元素,xpath 68、你是怎么开发测试框架的? 69、PO模型是怎么做的?...左外连接:将左表为驱动表进行连接,结果数据包含左表全部数据,以及右表中和左表匹配的数据,左表中有,但右表中没有的数据显示null(取左边全部及右边部分数据) SELECT * FROM TABLE1...但左表中没有的数据显示null(取右边全部及左边部分数据) SELECT * FROM TABLE1 RIGHT JOIN TABLE2 ON TABLE1.USERNAME=TABLE2.USERNAME
不如看看网页源码或者请求信息,看看有没有有效的信息。 查看网页信息 鼠标右键点击到图片上,查看元素 ? 这一瞬间的图片,还好我二十几年的麒麟臂没白练,我们看看元素查看到的都是什么东西 ?...那么我们可以确认这张图片应该是被打乱的,如果我们可以把它拼起来,是不是就离计算缺口位置比较近了。现在我们应该要注意到元素查看里后面的位置信息了,那么多,看起来应该跟这个打乱顺序有点关系吧。...先随便找一个特征点,查看元素,看它定位到那个div元素那里,然后再看看后面的位置。基本就是这样,所以我们找图片既然和位置有关,那么我们最好选一些位置明显的地方,比如中间,或者两边。 ?...按照这种的话也应该是12呀,按照这种方式我们继续找一找剩下的,通过分析我们发现每个小块+12作为下一个小块的起点。这样的话左右各去掉一个像素,宽度不就是10了吗?...坐标分析 分析一下我们图9到图12的截图,首先说图9,我本来觉得它x、y应该是0,就算不是0,也应该是各位数字吧,结果的y是58,这个算到下半截图片区域了,x是157,跑中场去了。
原因就在这里:你点击第二个时已经是新页面,当然找不到之前页面的元素。这时,他会问“可是明明元素就在那里,没有变,甚至我是回退回来的,页面都没有变,怎么会说是新页面?”。...id是不同的,也就是说这是两个不同的元素,如果你用以下的方式来定位,自然会因为找不到而报错: # -*- coding: utf-8 -*- from selenium import webdriver...跳转到了新的页面,但这张新页面上有一些元素跟之前页面是长得一样的,这也是一张新的页面了。...比如:一排分页按钮,你点击下一页跳转到了第二页,想要还用原来的元素操作到下一页,那也是不可能的了。...总之一句话,遇到页面有变化的情况,不要去循环元素,去循环个数或者定位方式,在循环中获取元素。
前言 面试web自动化必然会问到selenium,问selenium相关的问题定位是最基本的,也是自动化的根本,所以面试离不开元素定位问题。...“如何提高selenium脚本的执行速度?” “selenium中如何保证操作元素的成功率?...,它的标签不可能动态吧,那就定位父元素id=”yo”啊: ....//*[@id='yo']/button 还有一种情况动态的,那就是这个元素一会在页面上方,一会在下方,飘忽不定的动态元素,定位方法也是一样,按f12,根据元素属性定位(元素的tag、name的步伐属性是不会变的...(“ziyuans”) 但是通过子元素找父元素这种思维之前真没注意过,实际上selenium里面提供了该方法 ?
要是大佬看到了不会冒犯到吧,不会吧…… 安装 Selenium 包 Pip 安装 sudo pip install selenium 源码包安装 下载源码 sudo python setup.py install...Chrome: 注意,先在设置 —> 关于Chrome 里查看Chrome版本号,再去我给的淘宝源里找。再注意,在淘宝源里找版本时,如果没有本浏览器的版本的话,就找自己版本号的上一个。...Firefox: 选择自己系统版本下载对应的。我不用火狐,报错别怪我 (弱小.jpeg) IE: 这我没啥注释,但建议IE11用用2.5版本就好。(这年头还有人用IE?可怕可怕。)...注意,find_element_by_xpath这个函数很微妙,它的工作是在整个页面找一个元素,敲黑板,是一个。还有一个函数是find_elements_by_xpath,找的是一堆元素。...按照上次那样,打开Devtools,找到搜索按钮的元素,接着Copy —> Copy Xpath。
分析: refresh,不论你是主动刷新还是页面自动刷新 back,已经跳转到了其他页面,然后你用driver.back()跳回来,这也是一张新的页面了 跳转到了新的页面,但这张新页面上有一些元素跟之前页面是长得一样的...解决: 只要刷新页面之后重新获取元素就行,不要提前获取一组元素,然后去循环操作每一个元素,这种情况还是获取元素的个数,然后在循环中获取相应位置的元素,在用的时候才去获取,这样你就获取到最新的id了,也不会出现找错人的尴尬了...我今天就遇到一个,其实之前也遇到了,只是没有着重记录一下而已。 有一个四个菜单,分别要去带四个传入的数据点击四次,检查是否能到另外一个页面,页面返回是否正常。...我就使用了一个循环,但是最开始没细看,直接循环成了元素,到新页面验证完成之后又返回原来的页面继续定位,发现定位不了了;这时我才想起来不应该循环元素,应该循环元素的个数,在这个循环的过程中再来定位获取元素...可参考博文:Selenium使用之——添加等待时间的三种方式
主要的程序结构应该差不多类似这样: 一个函数负责启动爬虫,指出我们需要查找的城市和日期 这个函数获取到最初的搜索结果,按照“最优”方式排序航班列表,然后点击“载入更多” 另外一个函数爬取整个页面,返回一个...我会在之后说明需要调整的地方,不过如果你在尝试的时候遇到问题,欢迎在下面留言哈。 接下来,我们按下搜索按钮,把地址栏里的链接地址复制下来。这个地址长得应该类似下面代码中的那个字符串。...而前面这种写法,它先定位一个 ID 是 wtKI-price_aTab 的元素,然后找它的第一个子 div然后往下找 4 层 div 以及 2 层 span …… 怎么说呢,它这次应该是会成功的吧,但一旦网页层次有变化...基本上,它的工作方式就是指向你想要的某个对象(比如这里的 resultWrapper),用某种方式(XPath 选择器)把文字都抓下来,然后把内容都放在某个方便读取的对象(先是 flight_containers...那么,在拉拉杂杂地说了这么多之后(有的时候我真的容易跑题),我们终于到了实际抓取页面内容的函数啦! 我已经把页面上大部分需要处理的元素都丢给 page_scrape 函数来处理了。
工作中需要对web界面进行测试,在网上找了找解决方案,最终找到了Selenium WebDriver。...Condition满足,但如果等待的时间超过指定的值Condition还是没有满足,则抛出异常。...特别要注意的地方 绝大部分接口返回值都是Promise 这也是说最前面那个例子本来应该要像下面这样写的 var webdriver = require('selenium-webdriver'),...后面翻阅selenium-webdriver的源码,在它的examples里找到了parallel_flows.js,原来WebDriver JavaScript SDK本身也是支持多个测试同时进行的。...经验教训 以后使用第三方重要库决不能只看它给出的文档,还是应该仔细看一看人家给出的使用示例。
不如看看网页源码或者请求信息,看看有没有有效的信息。 查看网页信息 鼠标右键点击到图片上,查看元素 ? 图2 这一瞬间的图片,还好我二十几年的麒麟臂没白练,我们看看元素查看到的都是什么东西 ?...那么我们可以确认这张图片应该是被打乱的,如果我们可以把它拼起来,是不是就离计算缺口位置比较近了。现在我们应该要注意到元素查看里后面的位置信息了,那么多,看起来应该跟这个打乱顺序有点关系吧。...先随便找一个特征点,查看元素,看它定位到那个div元素那里,然后再看看后面的位置。基本就是这样,所以我们找图片既然和位置有关,那么我们最好选一些位置明显的地方,比如中间,或者两边。 ?...按照这种的话也应该是12呀,按照这种方式我们继续找一找剩下的,通过分析我们发现每个小块+12作为下一个小块的起点。这样的话左右各去掉一个像素,宽度不就是10了吗?...坐标分析 分析一下我们图9到图12的截图,首先说图9,我本来觉得它x、y应该是0,就算不是0,也应该是各位数字吧,结果的y是58,这个算到下半截图片区域了,x是157,跑中场去了。
如果没有元素匹配name值,会返回NoSuchElementException异常。...这也体现了XPath方法的一个优点: 当没有一个合适的ID或Name属性来定位所要查找的元素时,你可以使用XPath去定位这个绝对元素(但作者不建议定位绝对元素),或者定位一个有ID或Name属性的相对元素位置...如果没有元素匹配,将会返回一个NoSuchElementException异常。...如果没有元素匹配,将会返回一个NoSuchElementException异常。...如果没有元素匹配,将会返回一个NoSuchElementException异常。
本系列将全面讲解 .NET 中一个非常成熟的库 —— selenium,并教会你如何使用它爬取网络上所需的数据 自动化爬虫虽然方便,但希望大家能顾及网站服务器的承受能力,不要高频率访问网站。...这里的根本问题在于,wd.FindElements 在页面上找不到任何符合条件的元素,但是 wait 对象却没有重复查找 这是因为,wait 对象中的逻辑是,委托中的调用返回 null 或有异常,才被识别为继续等待...但是 FindElements 即使页面没有任何元素,也会返回一个空的集合 ---- 知道原因,那么我们很容易就能自己解决这个问题。...注意这里并没有调用下级方法,而是直接把下级方法作为结果返回(下级方法名字后面是没有括号的) ---- 调用很简单,原来的代码上,在 wait.Until 里面调用我们的帮助方法: private static...(点击、发送文本、找元素、找所有元素),这些方法自带等待功能,默认使用 css 选择器 我已经简单制作了一个库,nuget安装即可: Install-Package CrystalWind.SeleniumWrapper
64 位系统;Python3.6.2(官方已经更新到了 3.6.4) 官方下载地址:https://www.python.org/downloads Selenium 3.4.3;谷歌 59。...所以,我们会在这里使用的是谷歌的页面定位的,其实也就很简单的事。我们通过在页面中按 F12 查看页面就的元素,找到我们需要的元素,点击右击就可以看到我们需要定位的操作了。 ?...2.4 find_element_by_tag_name() 这个定位的方法是通过元素的标签属性对元素进行定位,在检查元素的时候查看元素的最前面的 input,但是这个定位方式有个不好的地方在于很多页面都有同样的标签存在...实际上是会报错的,因为 selenium 在定位的时候不清楚我们要找的是哪个元素。 ? 我们如果一定要用这个方法的话,我们就需要清楚,我们定位的标签的精准位置了。...2.5 find_element_by_link_text() 这个定位方式是通过查找页面的文本信息进行定位。也就是我们看到页面的信息去定位,例如:我们需要定位百度首页的登录按钮,并点击它。 ? ?
要是大佬看到了不会冒犯到吧,不会吧…… # 安装 Selenium 包 # Pip 安装 sudo pip install selenium # 源码包安装 源码链接 sudo python...Chrome: 注意,先在设置 --> 关于 Chrome 里查看 Chrome 版本号,再去我给的淘宝源里找。再注意,在淘宝源里找版本时,如果没有本浏览器的版本的话,就找自己版本号的上一个。...Firefox: 选择自己系统版本下载对应的。我不用火狐,报错别怪我 (弱小.jpeg) IE: 这我没啥注释,但建议 IE11 用用 2.5 版本就好。(这年头还有人用 IE? 可怕可怕。)...注意, find_element_by_xpath 这个函数很微妙,它的工作是在整个页面找一个元素,敲黑板,是一个。还有一个函数是 find_elements_by_xpath ,找的是一堆元素。...按照上次那样,打开 Devtools,找到搜索按钮的元素,接着 Copy --> Copy Xpath。
本文主要介绍 Selenium Python API 技术,它以一种非常直观的方式来访问 Selenium WebDriver 的所有功能,包括定位元素、自动操作键盘鼠标、提交页面表单、抓取所需信息等。...通过 Selenium Python API,用户可以以一种直观的方式来访问 Selenium WebDriver 的所有功能。...该方法返回第一个匹配该链接文本值的元素。如果没有元素与该链接文本匹配,则抛出一个 NoSuchElementException 异常。...如果没有元素匹配,则返回一个 NoSuchElementException 异常。...获取当前页面的 URL tag_name 返回元素的标签名称 5 键盘和鼠标自动化操作 Selenium 技术还可以实现自动操作键盘鼠标的功能,所以它更多地用用于自动化测试领域,通过自藕丁操作网页、
对其他元素没有影响。此方法并不会触发鼠标和键盘操作。 String getTagName():获取并返回此元素的tagName(String类型)。...这些方法的返回值都是WebDriver,我们可以理解为driver的焦点发生了转移。因此,有一点需要留意,既然焦点转移到了新的页面上,那么想要定位原页面的元素,就要跳转回去。...第一个构造方法才是最重要的,它的入参是当前的WebDriver。...在UI自动化执行过程中,如果页面或元素没有加载完成,就进行下一步操作,无疑是会抛出异常的,因此selenium提供了多种元素等待的方法。...这种设置应该谨慎,充分考虑Xpath等方式定位元素较慢的可能性。 6.2 显式等待 显示等待相对于隐式等待更加灵活,能针对各个元素进行单独的设置。
元素定位的8种方式 Selenium常用命令: 实例化Web元素 在每次访问特定元素时,我们可以为它实例化一个WebElement对象,而不是使用冗长的driver.findElement(By.locator...Web元素交互的最常见方式。...2、getTitle() 示例用法: 不需要参数 获取当前页的标题 去掉title字符串前后的空白 如果页面没有标题,则返回空字符串 3、getPageSource() 示例用法: 不需要参数 以字符串值的形式返回页面的源代码...关闭和退出浏览器窗口 切换内嵌框架Frame 要访问框架中的GUI元素,我们应该首先引导WebDriver将焦点放在框架或弹出窗口上,然后才能访问其中的元素。...在验证元素的状态时,可以使用isEnabled()、isdisplay()、isSelected() 和WebDriverWait 和ExpectedConditions 方法的组合; 但这并不是验证元素是否存在
4.可以通过源码看到它的一些方法和操作流程。按照这个引入方式: from selenium.webdriver.common.action_chains import ActionChains ?...如果你获取所有的下拉列表值,再去通过for循环定位,万一你要找的元素在列表的最后,这就要花费一些时间了。 一般来说都是第一种,根据文本内容来定位。 怎么定位这种鼠标悬浮才出现的元素?...然后按住快捷键ctrl+shift+c之后,按着不动,将你的鼠标移动到下拉列表中,把鼠标放在你要定位的元素上。 ?...它的说明中返回了一个所有options,options是Select的子元素。 ? 这是源码:通过它的标签名称,标签名称是option,这个options选项,返回的是所有的选项对象,并且是个列表。...自己写了个xpath表达式,然后跟着你传进来的文本内容做了个替换。 ? 表示都不选。不选中方式也有3种。 ? click操作导致了高级搜索选项出来了,正好到了这个页面。 ?
现在你知道你在找什么了,BeautifulSoup 模块会帮助你在字符串中找到它。...注意,返回的元素中的href属性的值没有初始的https://pypi.org部分,所以您必须将其连接到href属性的字符串值。...使用selenium,你可以用比requests和bs4高级得多的方式与网页互动;但是因为它启动了一个网络浏览器,如果你只是需要从网上下载一些文件,它就有点慢,很难在后台运行。...在这个页面上,我们试图找到类名为'bookcover'的元素,如果找到这样的元素,我们使用tag_name属性打印它的标签名。如果没有找到这样的元素,我们打印一条不同的消息。...我们找到了一个类名为'bookcover'标签名为'img'的元素。
封装基本函数-执行日志、异常处理、失败截图 1.任何元素操作之前一定要等待,操作任何一个元素之前都要等到它出现,然后再去操作它,否则会遇到报错,元素找不到。...页面的某一个操作导致页面发生变化的时候,就必须要等,等到元素出现,再去使用。 2.一个用例执行失败,但是整个运行过程不应该结束。所以,放在其它服务器上,我们分析问题的时候需要日志和测试报告。...对click() find_element wait .text get_attribute,先单独对这些函数都做一些异常处理,对这些基本函数都做到了异常处理日志输出,所有这些地方来调用它的都能做到了。...只能说目前做的框架对以前的项目是完全够用的,未来在工作过程中遇到什么问题,再去考虑扩展。 8.断言中没有做异常捕获,不捕获也没关系,断言失败的详情会在测试日志中体现的比较明显。...,找元素,然后再去点击元素。
领取专属 10元无门槛券
手把手带您无忧上云