当前位置: 首页 > news >正文

Selenium库简介

Selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些JavaScript动态渲染的页面来说,这种抓取方式十分有效。

基本使用示例:

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




def main(args):
    #打开Chrome浏览器
    browser = webdriver.Chrome()
    try:
        #浏览器跳转到百度
        browser.get('https://www.baidu.com')
        #获取当前页面id为kw的元素,kw为输入框
        input = browser.find_element_by_id('kw')
        #输入python
        input.send_keys('Python')
        #回车
        input.send_keys(Keys.ENTER)
        #设置最长等待时间
        wait = WebDriverWait(browser,10)
        #如果在等待时间内id为content_left的元素没有出现则抛出加时异常
        wait.until(EC.presence_of_element_located((By.ID,'content_left')))
        print(browser.current_url)
        print(browser.get_cookies())
        print(browser.page_source)
    finally:
        browser.close()
    return 0

if __name__ == '__main__':
    import sys
    sys.exit(main(sys.argv))

 

下面详细介绍Selenium的用法。

from selenium import webdriver
browser = webdriver.Chrome()
browser = webdriver.Firefox()
#浏览器对象初始化

browser.get('https://www.taobao.com')
#用get()方法访问百度

print(browser.page_source)
#输出淘宝页面的源代码

q = browser.find_element_by_id('q')
#获得源代码的q节点
q = browser.find_element_by_css_selector('#q')
#用CSS选择器获取
q = browser.find_element_by_xpath('//*[@id="q"]')
#用XPath获取
#获取的结果皆为WebElement类型

这里列出其它获取单个节点的方法:
find_element_by_name
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name

from selenium.webdriver.common.by import By
q = browser.find_element(By.ID,'q')
#也可以这样获取

lis = browser.find_elements_by_css_selector('.service-bd li')
#获取多个节点,element后多了个s

q.send_keys('少女歌剧')
#输入文字

button = browser.find_element_by_class_name('btn-search')
button.click()
#点击搜索按钮

browser.get("https://www.zhihu.com/explore")
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
#将进度条拉到最下
browser.execute_script('alert("To Bottom")')
#弹出alert提示框

print(q.get_attribute('class'))
#获取节点属性
print(q.text)
#获取文本
print(q.id)
#获取id

browser.switch_to.frame('iframeResult')
#切换Frame

from selenium.webdriver.support.ui import WebDriverWait
wait = WebDriverWait(browser,10)
from selenium.webdriver.support import expected_conditions as EC
#设置最长等待时间
input = wait.until(EC.presence_of_element_located((By.ID,'q')))
#如果id为q的节点没有出现则抛出EC异常
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.btn-search')))
#不可点击则抛出异常

browser.back()
#后退
browser.forward()
#前进

print(browser.get_cookies())
#输出cookie
cookie = {
'name':'name',
'domain':'www.zhihu.com',
'value':'germey'
}
browser.add_cookie(cookie)
#添加cookie
browser.delete_all_cookies()
#删除所有cookie

browser.execute_script('window.open()')
#开启一个选项卡
browser.switch_to_window(browser.window_handles[1])
#切换到第二个选项卡
browser.get('https://www.baidu.com')
#在第二个选项卡打开一个新页面

browser.close()
#关闭浏览器

 

转载于:https://www.cnblogs.com/wdl1078390625/p/9917288.html

相关文章:

  • shell 相关操作
  • Android 内存分析
  • ASP.NET的几个试题(《C#与.NET程序员面试宝典》)
  • 可以使你成为更优秀程序员的5个好习惯
  • HBase生产环境配置与使用优化不完全指南
  • co模块的前端实现
  • 【转】【支付 . 技术控】最全最强解析:支付宝系统架构内部剖析(架构图)...
  • 写给正在入坑linux系统的伙伴
  • 关于Activity销毁,而绘制UI的子线程未销毁出现的问题
  • BootStrap框架
  • Django3_Url控制系统和View视图
  • FastReport在线报表设计器工作原理
  • JavaScript是怎样AOP实现?
  • 常用公共DNS服务器地址
  • BZOJ 2733: [HNOI2012]永无乡 启发式合并treap
  • 时间复杂度分析经典问题——最大子序列和
  • 【Leetcode】104. 二叉树的最大深度
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • php ci框架整合银盛支付
  • php的插入排序,通过双层for循环
  • 工程优化暨babel升级小记
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 如何设计一个微型分布式架构?
  • 用mpvue开发微信小程序
  • 再谈express与koa的对比
  • #14vue3生成表单并跳转到外部地址的方式
  • #mysql 8.0 踩坑日记
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (原)Matlab的svmtrain和svmclassify
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .net 提取注释生成API文档 帮助文档
  • /proc/vmstat 详解
  • /var/lib/dpkg/lock 锁定问题
  • @Transaction注解失效的几种场景(附有示例代码)
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [51nod1610]路径计数
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用
  • [IDF]啥?
  • [LeetCode][138]【学习日记】深拷贝带有随机指针的链表
  • [na]wac无线控制器集中转发部署的几种情况
  • [NYOJ 536] 开心的mdd
  • [office] 怎么在Excel2003菜单栏自定义一个选项卡 #其他#微信#知识分享
  • [Oh My C++ Diary]return 1和return 0的区别
  • [PHP]pearProject协作系统 v2.8.14 前后端
  • [Python GUI PyQt] PyQt5快速入门
  • [Real world Haskell] 中文翻译:第一章 快速上手
  • [RISCV] 为android14添加一个新的riscv device
  • [Unity3D]--更换天空盒子
  • [Web开发] 网页的浏览器兼容性测试工具
  • [WinForm开源]概率计算器 - Genshin Impact(V1.0)