selenium实现京东商城首页查找元素
语言:Python
京东商城想要找到某个未加载出的元素,需要将页面加载出来。
使用js实现
流程:
1. 需要引入包:
# 引入需要的包
import time from selenium import webdriver from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
2. 创建浏览器对象等
# 创建浏览器对象
driver = webdriver.Chrome()
url = "http://www.baidu.com"
driver.get(url) # 窗口最大化
driver.maximize_window()
3. 定位京东商城网站,点击等操作
# 等待搜索框元素出现,使用显性等待
loc = (By.ID, 'kw')
WebDriverWait(driver, 20).until(EC.visibility_of_element_located(loc)) # 定位、点击元素操作,需要使用等待
jd_link = driver.find_element_by_id("kw")
jd_link.send_keys("京东商城", Keys.ENTER)
loc = (By.XPATH, '//a[contains(text(),"正品低价、品质保障")])
WebDriverWait(driver, 20).until(EC.visibility_of_element_located(loc))
driver.find_element(*loc).click()
# 窗口句柄操作
“”“
一般情况下使用最新窗口,则:
win = driver.window_handles
driver.switch_to.window(win[-1])
”“” win = driver.window_handles
driver.switch_to.window(win[-1]) # 需要根据实际的窗口尺寸,来决定每次滚动距离,所以需要获取实际窗口尺寸
# window.outerHeight:包含工具栏和滚动条
# window.innerHeight:不包含工具栏和滚动条,仅内容可视区域 lo = (By.XPATH, '//*[@id="J_top"]/div[1]/a/h3') # 获取当前窗口宽高: get_window_size()方法
win_size = driver.get_window_size()
# 获取当前窗口内容可视区,execute_script()方法
inner_height = driver.execute_script("
var a = window.innerHeight;
return a;
")
print("当前窗口的内容可视区域-高度:",inner_height) # 获取当前整个html页面的body高度。
body_height = driver.execute_script("
var a = document.body.scrollHeight;
return a;
")
print("当前整个html页面的body-高度:",body_height)
4. 不断向下滑动,直至找到目标元素
# 创建目标高度
scrolled_height = 0
new_body_height = body_height
old_body_height = 0
break_flag = False # 循环操作,直至找到目标元素
while new_body_height != old_body_height:
distance = int((new_body_height -scrolled_height)/ (inner_height * 0.5)) + 1
for i in range(distance):
# 滚动距离为 窗口内容可视区域的百分之50.可灵活配置哦!
driver.execute_script("
var a = window.innerHeight;
window.scrollBy(0,a*0.5);
")
# 滚动一次,页面内容会更新一部分。在滚动之后,查找当前页面是否包含了它。
# 如果没有,继续滚动。如果有,退出。
try:
WebDriverWait(driver, 10).until(EC.visibility_of_element_located(lo))
except:
pass
else:
print("找到啦!!!")
driver.find_element(*lo).click()
break_flag = True
# 终止for循环
break
if break_flag is True:
# 终止While循环
break
# time.sleep(3)
# 更新滚动
old_body_height = new_body_height
scrolled_height = new_body_height
new_body_height = driver.execute_script("
var a = document.body.scrollHeight;
return a;
")
print("老-当前整个html页面的body-高度:", old_body_height)
print("新-当前整个html页面的body-高度:", new_body_height)
selenium实现京东商城首页查找元素的更多相关文章
- Android 深入ViewPager补间动画,实现类京东商城首页广告Banner切换效果
如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456 某天看到京东商城首页的滑动广告的Banner,在流动切换的时候有立体的动画效果,感觉很有意思,然后研究了下 ...
- 使用Python学习selenium测试工具-4:查找元素
转自:https://blog.csdn.net/wd168/article/details/51819930 web通常包含了Hyper Text Markup Language (HTML).Ca ...
- 京东商城首页jquery轮播特效
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...
- 封装查找元素以及集成日志输出,Base模块
关于查找元素封装,Base模块 """ Selenium 封装基类 封装查找元素以及集成日志输出 """ from HTMLReport i ...
- Scrapy实战篇(八)之Scrapy对接selenium爬取京东商城商品数据
本篇目标:我们以爬取京东商城商品数据为例,展示Scrapy框架对接selenium爬取京东商城商品数据. 背景: 京东商城页面为js动态加载页面,直接使用request请求,无法得到我们想要的商品数据 ...
- selenium常用操作,查找元素,操作Cookie,获取截图,获取窗口信息,切换,执行js代码
目录: 1. 常用操作 2. 查找元素 3. 操作Cookie 4. 获取截图 5. 获取窗口信息 6. 切换 7. 执行JS代码 简介 selenium.webdriver.remote.webdr ...
- (java)selenium webdriver学习--通过id、name定位,输入内容,搜索,关闭操作、通过tagname查找元素
selenium webdriver学习--通过id.name定位,输入内容,搜索,关闭操作:通过tagname查找元素 打开谷歌浏览器,输入不同的网站,搜索框的定位含有不同元素(有时为id,有时为n ...
- 01-02 Flutter仿京东商城项目 功能分析、底部导航Tab切换以及路由配置、架构搭建:(Flutter仿京东商城项目 首页布局以及不同终端屏幕适配方案)
Flutter和Dart交流学习群:交流群:452892873 01Flutter仿京东商城项目 功能分析.底部导航Tab切换以及路由配置.架构搭建 02Flutter仿京东商城项目 首页布局以及不同 ...
- <自动化测试>之<selenium API 查找元素操作底层方法>
搜罗了一些查找元素的除标准语句外,另外的语句使用方法,摘自 开源中国 郝云鹏driver = webdriver.Chrome(); 打开测试页面 driver.get( "http://b ...
随机推荐
- 2018-2019 ACM-ICPC Brazil Subregional Programming Contest B. Marbles(博弈)
题目链接:https://codeforc.es/gym/101908/problem/B 题意:两个人玩游戏,有 n 块石头,初始坐标为(x,y),一次操作可以将一块石头移动到(x - u,y),( ...
- 操作mysql 中文乱码情况
解决方法 : 在连接字符串中设置charset=utf8 即可正常添加中文字符 <add name="mtgzghEntities" connectionString=& ...
- 使用Joda-Time优雅的处理日期时间(转)
简介 在Java中处理日期和时间是很常见的需求,基础的工具类就是我们熟悉的Date和Calendar,然而这些工具类的api使用并不是很方便和强大,于是就诞生了Joda-Time这个专门处理日期时间的 ...
- java+上传整个文件夹的所有文件
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...
- vim 自动代码格式调整
1,gg 跳转到第一行 2,shift+v 转到可视模式 3,shift+g 全选 4,按下神奇的 =
- HDU - 6150 构造题
最近的vj好垃圾,老崩,实名吐槽 HDU - 6150 题意:给出一个错误的求最小点覆盖的函数,需要来构造一组样例,使得那个函数跑出来的答案是正解的3倍以上. 很巧妙的构造技巧,首先想法就是弄一个二分 ...
- 【csp模拟赛4】旅行计划 (travelling.cpp)--欧拉回路
[题目描述] 小 Z 打算趁着暑假,开启他的旅行计划.但与其他同学不同的是,小 Z 旅 行时并不关心到达了哪个网红景点打了哪些卡.小 Z 更关注沿路的风光,而且 小 Z 觉得,尽管多次到达同一个地方, ...
- jQuery的$符号
jQuery使用$的原因是: 书写简洁, 相对于其他字符与众不同, 容易被记住. JQuery占用了两个变量: $ 和 jQuery. 当在代码中打印 $ 和 jQuery时: <script ...
- C,线程池
/* 线程池组成: 1.管理者线程:创建并管理线程,包括添加.删除.销毁线程,添加新任务 2.工作线程:线程池中的线程,执行管理者分配的任务 3.任务接口:任务要实现的接口,供工作线程调用 4.任务队 ...
- R语言:as.Date出现NA值
> head(as.Date(data$日期,'%y%M%D'))[1] NA NA NA NA NA NA data日期格式如下: 解决办法: > head(as.Date(data$日 ...