前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Selenium和PhantomJS 终极最全使用总结

Selenium和PhantomJS 终极最全使用总结

原创
作者头像
Python疯子
发布2018-08-27 01:18:52
3.2K0
发布2018-08-27 01:18:52
举报
文章被收录于专栏:Python疯子Python疯子

PhantomJS 和 Chromedriver操作方式以及功能一致

主要区别 PhantomJS 无界面模式 节省内存

Chromedriver 完全模仿浏览器 消耗内存

1. 加载页面
image.png
image.png
截取的是网页的完整页面,包括下拉进度条的内容

Chromedriver只截取弹框浏览器的可视化内容页面

  1. 查看请求信息
代码语言:txt
复制
driver.page_source # 查看网页源码
代码语言:txt
复制
driver.get_cookies() # # 获取当前浏览器的全部cookies
代码语言:txt
复制
driver.current_url # 获取当前页面的url
  1. 退出
代码语言:txt
复制
driver.close() #退出当前页面, 但浏览器还在
代码语言:txt
复制
driver.quit()  #退出浏览器
  1. 定位和操作 模仿浏览器打开百度并搜索关键词python
    百度
    百度

######主要利用定位 填充关键词 点击搜索按钮

001 先找到文本输入框元素,输入内容

002 找到搜索按钮 进行搜索

定位元素:
定位元素.png
定位元素.png
ment.text

获取属性值:element.get_attribute("href")

给输入框赋值: element.send_keys()

操作点击事件: element.click()

find_element和find_elements的区别

带s的返回的是列表

不带s的是返回列表中的第一个元素

selenium处理cookie

driver.get_cookies()获取的是完整的cookie信息!不光有name、value,还有domain等其他信息!
image.png
image.png
添加Cookie
代码语言:txt
复制
driver.add_cookie({'name':'xxxx','value':'xxxxxxxxxxx'})
刷新页面
代码语言:txt
复制
 driver.refresh()

页面等待 :https://cloud.tencent.com/developer/article/1330764

01 强制等待

time.sleep(10) 强制要求在时间内出现,否则报错,不能很好的控制时间,浪费资源

02 隐示等待

隐性等待对整个driver的周期都起作用,所以只要设置一次即可

隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。

driver.implicitly_wait(30) # 隐性等待,最长等30秒

03 显示等待

代码语言:txt
复制
WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)

这里需要特别注意的是until或until_not中的可执行方法method参数,很多人传入了WebElement对象,如下:

代码语言:txt
复制
WebDriverWait(driver, 10).until(driver.find_element_by_id('kw'))  # 错误

这是错误的用法,这里的参数一定要是可以调用的,即这个对象一定有 call() 方法,否则会抛出异常:

TypeError: 'xxx' object is not callable

image.png
image.png

######selenium执行js代码

代码语言:txt
复制
js = 'window.scrollTo(0,document.body.scrollHeight)' # js语句
代码语言:txt
复制
driver.execute_script(js) # 执行js的方法
image.png
image.png
通过执行js来新开一个标签页
代码语言:txt
复制
js = 'window.open("https://www.sogou.com");'
代码语言:txt
复制
driver.execute_script(js)
代码语言:txt
复制
time.sleep(1)

switch方法切换的操作

01窗口切换

代码语言:txt
复制
# 1. 获取当前所有的窗口
代码语言:txt
复制
current_windows = driver.window_handles
代码语言:txt
复制
# 2. 根据窗口索引进行切换
代码语言:txt
复制
driver.switch_to.window(current_windows[1])

######切换iframe

iframe是html中常用的一种技术,即一个页面中嵌套了另一个网页,selenium默认是访问不了frame中的内容的,对应的解决思路是

代码语言:txt
复制
driver.switch_to.frame()

思路:先定位并切换至iframe内,再进行你安排前元素操作 最后可通过切换至窗口,从iframe中切换出iframe 进入到页面

代码语言:txt
复制
login_frame = driver.find_element_by_id('login_frame') # 定位frame元素
代码语言:txt
复制
driver.switch_to.frame(login_frame) # 转向到该frame中
image.png
image.png

######alert弹框处理

当你触发了某个事件之后,页面出现了弹窗提示,处理这个提示或者获取提示信息方法:driver.switch_to.alert() # 跟frame一样的处理方式!

页面前进和后退

代码语言:txt
复制
driver.forward()     # 前进
代码语言:txt
复制
driver.back()        # 后退

selenium 三大重要功能

######无界面模式
无界面模式.png
无界面模式.png

######更换UA

更换UA.png
更换UA.png

######使用代理IP

代理IP.png
代理IP.png

三个可以同时使用

selenium的优缺点

• selenium能够执行页面上的js,对于js渲染的数据和模拟登陆处理起来非常容易

• selenium由于在获取页面的过程中会发送很多请求,所以效率非常低,所以在很多时候需要酌情使用

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 添加Cookie
  • 刷新页面
  • 通过执行js来新开一个标签页
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档