今天抽点时间总结下Selenium WebDriver找不到元素的情况。 当然这里说的是css或者XPath都没写错,定位准确,也并非使用了不稳定的定位语句。...在当前页面找不到这个元素了,但是你自己手动复制到页面开发者工具上查看明明有啊,为啥在代码里面就找不到了呢?...其实呢是在操作的过程中页面发生了变化,刷新了,虽然表面上看起来两个元素长得一模一样,事实上是每一个元素都有自己的一个ID号。 用代码(Python)来证明!...比如:一排分页按钮,你点击下一页跳转到了第二页,想要还用原来的元素操作到下一页,那也是不可能的了。...可参考博文:Selenium使用之——添加等待时间的三种方式
前几天写了用爬虫来揭露约稿骗局的真相,但实际上对于动态加载的数据来说,用程序爬取比较困难,在这种情况下,可以使用selenium来模拟浏览器行为,达到同样目的。...options = webdriver.ChromeOptions() options.add_argument('headless') 删除页面上元素 在使用了headless模式后,发现浏览器最后还是越来越慢...,应该是因为页面上元素太多,渲染不过来造成的。...,还是找不到“大神带我来搬砖” ?...因为每次需要保留最后一个li元素,爬取下来的动态有重复的。
import time import re #正则表达式 from selenium import webdriver from selenium.webdriver.common.by import...By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import...CitySelect']").click() #选择出发点 cityList = driver.find_elements_by_xpath("//*[@id='CitySelect']/dd/ul...->"+str(i+2)+"页") time.sleep(2) return driver 跳进产品页,并根据标签,抓取总页数,在遍历所有旅游产品后,再跳到下一页进行循环遍历 5...priceStr, '供应商':productRetailStr, '评分':gradeStr, '人数':commentNum, } 在产品页面上获取所有可见信息
传统的web项目测试,大多数都依靠测试部门小伙伴人工操作,费时费力还容易侧漏`(*∩_∩*)′ 错了 是漏测, 而selenium则为项目的测试提供了很大的便利,但并不是所有项目都适合, 哪些适合呢:...公司自己的产品,且需要经常回归测试,比如类似OA这类业务系统产品 不适合的呢:比如外包业务,快速交付后就不管的,只需要测试一两次 案例一:一个简单示例(无弹出框这类单一页面),先看看执行效果(点击图片查看高清版本...:nth-child(2) > li:nth-child(1)")).click(); 43 44 //跳转到第2页 45 Thread.sleep(1000...handle)) continue; driver.switchTo().window(handles); } // 由于登录输入框在frame中,还需要先切换进入frame,否则,也找不到输入框的...driver.switchTo().frame(driver.findElement(By.xpath("//*[@id='ptlogin_iframe']"))); // 调试过程中,如果提示找不到元素
面包屑就是我们经常看到的“主分类>一级分类>二级分类>三级分类>……>最终内容页面”这样的方式,一种表达内容归属的界面元素,如下图所示: 为了浏览体验,一般情况只有3级,首页>栏目页>内容页,3层目录结构可以让用户随时随地的找到自己所在的位置又能保证栏目分类后的各个栏目的权重不至于太分散...一般来说当前层级都不会是链接,而父层级则基本是以链接,所以处理面包屑的思路就很明显了。找到面包屑所在的div或ul,然后再通过该div或ul找到下面的所有链接,这些链接就是父层级。...; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver...){ System.out.println(link.getText()); } // 获取当前层级 // 由于页面上可能有很多...class为active的元素 // 所以使用层级定位最为保险 WebElement current = driver.findElement(By.className("
原因就在这里:你点击第二个时已经是新页面,当然找不到之前页面的元素。这时,他会问“可是明明元素就在那里,没有变,甚至我是回退回来的,页面都没有变,怎么会说是新页面?”。...这个就需要你明白页面长得一样不代表就是同一张页面,就像两个人长得一样不一定是同一个人,他们的身份证号不同。页面,甚至页面上的元素都是有自己的身份证号(id)的。...id是不同的,也就是说这是两个不同的元素,如果你用以下的方式来定位,自然会因为找不到而报错: # -*- coding: utf-8 -*- from selenium import webdriver...跳转到了新的页面,但这张新页面上有一些元素跟之前页面是长得一样的,这也是一张新的页面了。...比如:一排分页按钮,你点击下一页跳转到了第二页,想要还用原来的元素操作到下一页,那也是不可能的了。
2-爬取视频的三种方式之一:requests篇(1) 爬虫案例2-爬取视频的三种方式之一:selenium篇(2) 爬虫案例2-爬取视频的三种方式之一:DrissionPage篇(3) selenium...selenium提供了很多编程语言的接口,如java,python,c#等。这让开发者可以自己编写脚本来自动化web应用的测试。本文主要介绍selenium在web爬爬取图片的案例。...import By # 用来定位web页面上的元素 from time import sleep # 时间函数 import os # 文件管理模块...='//div[@class="slist"]/ul/li/a/img') # 使用xpath定位到图片资源 for img in data_img: # 遍历...共勉 忙碌是治愈焦虑的良药 ps 有时候会报错可能会有以下几个原因 因为页面采用的懒加载技术,所以定位的时候要让元素在页面中显示出来才行,可以自己采用鼠标滚动事件 可以采用时间模块让页面中的元素全部加载后再去定位元素
前言 上一篇已经解决切换到微信公众号的webview上了,但是定位webview上元素的时候一直提示找不到,打印page_source也找不到页面上的元素,这个问题困扰了一整天,还好最后找到了原因, 此处埋了一个深坑...driver.contexts) driver.switch_to.context('WEBVIEW_com.tencent.mm:tools') 切换handle 1.切换到webview上后,发现死活定位不到页面上的元素...,打印page_source也找不到页面上的元素,最后打印当前的所以handle发现有两个 ?..., ‘CDwindow-fdadc56e-eb01-4575-927e-74966e64c082’] 操作webview 1.操作目标:点击webview上的“app”这个选项,然后定位列表页内容,并且打印出来...2.继续操作webview上的元素定位,这里的元素定位跟selenium的元素定位一样了 ? 3.定位app列表页,并且打印列表的内容 ?
在class中定义页面上的元素和一些该页面上专属的方法。 5、什么是page factory? Page Factory实际上是官方给出的java page object的工厂模式实现。...不可以,selenium不能定位不可见的元素。display=none的元素实际上是不可见元素。 9、selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?...viewport之外,也就是说如果元素必须是可见的或者通过滚动条操作使得元素可见; 判断元素是否是可以被点击的。...10、selenium自动化页面元素找不到存在异常的原因?...第二种方法:通过xpath的轴 parent/following-sibling/precent-sibling 12、如何去定位页面上动态加载的元素?
# Selenium 处理滚动条 selenium 并不是万能的,有时候页面上操作无法实现的,这时候就需要借助 JS 来完成了 当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的...这时候需要借助滚动条来拖动屏幕,使被操作的元素显示在当前的屏幕上。滚动条是无法直接用定位工具来定位的。...selenium 里面也没有直接的方法去控制滚动条,这时候只能借助 J 了,还好 selenium 提供了一个操作 js 的方法:execute_script(),可以直接执行 js 的脚本 # 一....虽然用上面的方法可以解决拖动滚动条的位置问题,但是有时候无法确定我需要操作的元素在什么位置,有可能每次打开的页面不一样,元素所在的位置也不一样,怎么办呢?...price_xpath = '//ul[@class="gl-warp clearfix"]//div[@class="p-price"]/strong/i/text()' # 提取数据的 infos
1.设计背景 随着IT行业的发展,产品愈渐复杂,web端业务及流程更加繁琐,目前UI测试仅是针对单一页面,操作量大。为了满足多页面功能及流程的需求及节省工时,设计了这款UI 自动化测试程序。...3.2.1 接口优化 直接调用 selenium 的接口经常会遇到些令人头疼的问题,比如网络问题使页面 loading 太慢,需要操作的元素还没展示出来,这种情况就会经常报元素找不到的 error,导致用例执行失败...页面上的元素都可以用 xpath 来描述;缺点,不稳定,大量使用会给用例维护产生很大的负担。...3.发现 selenium 的某些接口不能 work 了,此时最大的可能就是浏览器升级了。解决方法:重新下载低版本浏览器。 4.元素不可见。...有一种元素能在页面上正常展示,但对于工具来说它是不可见的,这是因为在一般情况下,元素可见需要满足以下几个条件:visibility!=hidden ; display!=none; opacity!
dom树里,并不代表该元素一定可见 visibility_of_element_located : 判断某个元素是否可见....举个例子,如果页面上有n个元素的class都是'column-md-3',那么只要有1个元素存在,这个方法就返回True text_to_be_present_in_element : 判断某个元素中的...dom树或不可见 element_to_be_clickable : 判断某个元素中是否可见并且是enable的,这样的话才叫clickable staleness_of :等某个元素从dom树中移除,...: 判断页面上是否存在alert 隐式等待: 隐式等待,是设置的全局等待。...用法:driver.switch_to_frame(element) 2、有时候点某个链接,会跳转到一个新的页签,这个时候需要切换到新打开的页签中才能继续操作。
问题:获取当前页好办,怎么获取接下来页面的内容? 带着这个思考,Selenium神器走入了我的视线。 预备知识 Selenium简介 Selenium是什么?一句话,自动化测试工具。...,使用这种方法几乎可以定位到页面上的任意元素。...下面是相对路径的引用写法: 查找页面根元素:// 查找页面上所有的input元素://input 查找页面上第一个form元素内的直接子input元素(即只包括form元素的下一级input元素,使用绝对路径表示...我们需要找到两个元素的位置,一个是页码元素的位置,我们根据这个元素的位置,将浏览器的滑动窗口移动到这个位置,这样就可以避免click()下一页元素的时候,有元素遮挡。...然后找到下一页元素的位置,然后根据下一页元素的位置,触发鼠标左键单击事件。 我们审查元素看一下,这两个元素: ? ?
初始化 导入必要的库 首先导入接下来自动化所需要的库 from selenium.webdriver.common.by import By from time import sleep from selenium...from selenium import webdriver: webdriver是Selenium的核心组件之一,它提供了与浏览器交互的接口。...,为了避免出现其他情况,点击搜索之后将页面滑动到最上方,因为查询到的结果就在最上方 # 使用JavaScript执行器让页面滚动到最上面,因为点击搜索之后可能会出现页面下滑的情况,导致点击企业的时候找不到...as e: print(e) # 如果在尝试获取内容的过程中发生任何异常,则将content_tag设置为空字符串 content_tag = "" 获取第二行的内容 因为第二行的内容不一定存在所以在定位的时候要做好找不到的准备...,导致点击企业的时候找不到,所以点击搜索后先把页面划到最上面 driver.execute_script("window.scrollTo(0, 0);") try:
右边是改造后的 现在的代码语义表达更加简练、稳定(自带等待机制) ---- 机制 想象一下如果是一个机器人帮你从网页上查找某个信息,比较合理的流程是: 让机器人每隔1秒到页面上"按规则"找一下 如果找到...,则通知你 如果找不到,下一秒继续 如果超过10秒都找不到,通知你 Selenium 的等待机制同样如此,而上述机制中唯一可以变化的就是"查找规则",这体现为 Wait.Until 的第一个参数接受一个...---- FindElements 无法等待的原因 这次项目自带 web 服务,启动调试会先启动 web 服务,在浏览器中输入本机 ip 即可浏览本文案例网页,操作看视频: vs 启动调试后,打开浏览器页...,输入 "localhost:8081" 出现页面 点击页面上的按钮,下方出现新文本 ---- 用"开发者工具",查看元素的标签: 可以看到,新增的内容都是由一个 div 标签包围,他们的共同特征是...这里的根本问题在于,wd.FindElements 在页面上找不到任何符合条件的元素,但是 wait 对象却没有重复查找 这是因为,wait 对象中的逻辑是,委托中的调用返回 null 或有异常,才被识别为继续等待
('n') # 点击元素,我们发现竟然回到了第一页,那是因为,当前页非第1页时,页面上出现了上一页元素,class属性值也为n,因此,这时得到的元素为上一页元素 In [71]: ele_next.click...dom树里,并不代表该元素一定可见 visibility_of_element_located 判断某个元素是否可见....可见代表元素非隐藏,并且元素的宽和高都不等于0 visibility_of 跟上面的方法做一样的事情,只是上面的方法要传入locator,这个方法直接传定位到的element就好了 presence_of_all_elements_located...举个例子,如果页面上有n个元素的class都是’column-md-3’,那么只要有1个元素存在,这个方法就返回True text_to_be_present_in_element 判断某个元素中的text...dom树或不可见 element_to_be_clickable 判断某个元素中是否可见并且是enable的,这样的话才叫clickable staleness_of 等某个元素从dom树中移除,注意,
这个无需着急,xpath是非常强大的元素查找方式,使用这种方法几乎可以定位到页面上的任意元素,在后面我会进行单独讲解。...下面是相对路径的引用写法: 查找页面根元素:// 查找页面上所有的input元素://input 查找页面上第一个form元素内的直接子input元素(即只包括form元素的下一级input元素,使用绝对路径表示...[1]//input 查找页面上第一个form元素://form[1] 查找页面上id为loginForm的form元素://form[@id='loginForm'] 查找页面上具有name属性为username...我们需要找到两个元素的位置,一个是页码元素的位置,我们根据这个元素的位置,将浏览器的滑动窗口移动到这个位置,这样就可以避免click()下一页元素的时候,有元素遮挡。...然后找到下一页元素的位置,然后根据下一页元素的位置,触发鼠标左键单击事件。 我们审查元素看一下,这两个元素: ? ?
在做web或app的自动化测试经过会出现找不到元素而报错的情况,很多时候是因为元素 还没有被加载出来,查找的代码就已经被执行了,自然就找不到元素了。...from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support...(driver.find_element(by=By.ID,value='kw'))) '''判断元素是否可见,如果可见就返回这个元素''' WebDriverWait(driver,10).until...dom或不可见,如果可见返回False,不可见返回这个元素''' #注意#swfEveryCookieWrap在此页面中是一个隐藏的元素 WebDriverWait(driver,10).until(...EC.element_to_be_clickable((By.XPATH,"//*[@id='u1']/a[ 8]"))).click() '''判断某个元素中是否可见并且是enable的,代表可点击'
使用chrome浏览器,右键查看页面元素.把鼠标定位到元素上,页面会自动定位到页面上....frame包含不用的元素在里边. douban⽹⾸⻚为例,通过元素检查登录区域是一个frame区域 用⾃动化脚本点击"密码登录"按钮,代码如下: from selenium import webdriver...面上经常有点击一个页⾯后,另外打开一个新窗口.是因为html中target参数是"_bank"控制....所以在做⾃动化测试过程中,点击跳转以后.页⾯句柄还在当⻚面,所以不能点击跳转以后的页面元素....等待 等待的⽬目的主要是为了页面加载完成才点击元素,避免找不到元素的现象.
您可以使用Selenium WebDriver来利用自动化进行錯誤的链接测试,而无需进行人工检查。 ? 当特定链接断开并且访问者登陆页面时,它将影响该页面的功能并导致不良的用户体验。...页面顶部的HTML标记损坏,JavaScript错误,错误的HTML / CSS自定义,嵌入式元素损坏等都可能导致链接断开。...客户端(即浏览器)可以在服务器准备等待的时间内发送相同的请求。 410(已去) HTTP状态代码比404(找不到页面)更永久。410表示该页面已消失。...这是用于使用Selenium查找网站上断开链接的测试方案: 测试场景 转到软件测试test面试小程序后台,即Chrome 85.0上的https://www.test-1.com/ 收集页面上存在的所有链接...通过CSS选择器“ a”属性找到Web元素,可以找到被测URL上存在的链接(即cnds博客)。
领取专属 10元无门槛券
手把手带您无忧上云