侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Selenium的使用详解

技术  /  管理员 发布于 7年前   176

先来看一下功能实现,代码如下:

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWait#声明浏览器对象browser = webdriver.Chrome()try:  browser.get('https:www.baidu.com')  input = browser.find_element_by_id('kw')  input.send_keys('Python')  input.send_keys(Keys.ENTER)  wait = WebDriverWait(browser,10)  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()

可以看到打开了百度网站,查询了“Python”并且输出了当前的url,cookies还有网页源代码。

下面再来介绍详细功能。

1、声明浏览器对象。

browser = webdriver.Chrome()browser = webdriver.Firefox()

浏览器的对象初始化,并将其赋值给browser对象。

2.以淘宝为例,请求网页。

browser = webdriver.Chrome()browser.get('https://www.taobao.com')print(browser.page_source)browser.close()

可以看到输出了淘宝的源码,随后关闭。

3.查找节点

单个节点

提取搜索框这个节点

检查搜索框如下:

查找搜索框:

browser = webdriver.Chrome()browser.get('https://www.taobao.com')# 通过id查找input_first = browser.find_element_by_id('q')# 通过css查找input_second = browser.find_element_by_css_selector('#q')# 通过xpath查找input_third = browser.find_element_by_xpath('//*[@id="q"]')print(input_first,input_second,input_third)browser.close()
# 查找单个节点的方法find_element_by_idfind_element_by_namefind_element_by_xpathfind_element_by_link_textfind_element_by_partial_link_textfind_element_by_tag_namefind_element_by_class_namefind_element_by_css_selector

通用方法查找:

browser = webdriver.Chrome()browser.get('https://www.taobao.com')input_first = browser.find_element(By.ID,'q')print(input_first)browser.close()
  • find_element()里面需要两个参数,查找方式By和值,
  • 例如:find_element(By.ID,'q')  通过查找ID的当时,查找id为q。

多个节点:

例如左侧的导航条所有条目:

browser = webdriver.Chrome()browser.get('https://www.taobao.com')lis = browser.find_elements_by_css_selector('.service-bd li')print(lis)browser.close()

获取多个节点的方法:

find_elements_by_idfind_elements_by_namefind_elements_by_xpathfind_elements_by_link_textfind_elements_by_partial_link_textfind_elements_by_tag_namefind_elements_by_class_namefind_elements_by_css_selector

通用方法在这里同样适用。

4、节点交互

import timebrowser = webdriver.Chrome()browser.get('https://www.taobao.com')input = browser.find_element_by_id('q')# 输入文字用send_keys()input.send_keys('ipone')time.sleep(1)#清空文字用clear()input.clear()input.send_keys('ipad')button = browser.find_element_by_class_name('btn-search')#点击button.click()

5、动作链

from selenium import webdriverfrom selenium.webdriver import ActionChainsbrowser = webdriver.Chrome()url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'browser.get(url)browser.switch_to.frame('iframeResult')#找到被拖拽的标签source = browser.find_element_by_css_selector('#draggable')#找到拖拽目的地的标签target = browser.find_element_by_css_selector('#droppable')actions = ActionChains(browser)actions.drag_and_drop(source,target)actions.perform()

运行结果如下:

6、执行JavaScript

例如下拉进度条,可以直接模拟运行JavaScript,适用execute_script()即可实现

from selenium import webdriverbrowser = webdriver.Chrome()browser.get('https://www.zhihu.com/explore')browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')browser.execute_script('alert("To Bottom")')

将滚动条拉到底部,执行结果如下:

7、获取节点信息

获取属性

代码如下:

from selenium import webdriverbrowser = webdriver.Chrome()browser.get('https://www.zhihu.com/explore')logo = browser.find_element_by_id('zh-top-link-logo')print(logo)# 获取class属性print(logo.get_attribute('class'))

获取文本值

代码如下:

from selenium import webdriverbrowser = webdriver.Chrome()browser.get('https://www.zhihu.com/explore')input = browser.find_element_by_class_name('zu-top-add-question')print(input.text)

输出结果如下:

获取id、位置、标签名和大小

以上面的标签为例:

from selenium import webdriverbrowser = webdriver.Chrome()browser.get('https://www.zhihu.com/explore')input = browser.find_element_by_class_name('zu-top-add-question')print(input.id)# 输出位置print(input.location)#标签名print(input.tag_name)#大小print(input.size)

输出结果:

8、界面切换

代码如下:

from selenium import webdriverfrom selenium.common.exceptions import NoSuchElementExceptionbrowser = webdriver.Chrome()browser.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')#界面切换到子界面browser.switch_to.frame('iframeResult')try:  # 查找logo  logo = browser.find_element_by_class_name('logo')except NoSuchElementException:  print('NO LOGO')  # 界面切换到父级界面browser.switch_to.parent_frame()# 查找logologo = browser.find_element_by_class_name('logo')print(logo)print(logo.text)

9、延时等待

隐式等待

当selenium没有在DOM中找到节点,继续等待,超出设定时间,抛出异常

browser = webdriver.Chrome()browser.implicitly_wait(10)browser.get('https://www.zhihu.com/explore')input = browser.find_element_by_class_name('zu-top-add-question')print(input)

显式等待

指定要查找的节点,然后指定一个最长等待时间,如果在规定时间内加载出来节点,返回节点,如果超出规定时间,抛出异常。

browser = webdriver.Chrome()browser.get('https://www.taobao.com/')wait = WebDriverWait(browser,10)input = wait.until(EC.presence_of_element_located((By.ID,'q')))# 节点可点击button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.btn-search')))print(input,button)

10、Cookies

browser = webdriver.Chrome()browser.get('https://www.zhihu.com/explore')# 获取cookiesprint(browser.get_cookies())# 添加cookiebrowser.add_cookie({'name':'name','domin':'www.zhihu.com','value':'germey'})print(browser.get_cookies())# 删除所有的cookiesbrowser.delete_all_cookies()print(browser.get_cookies())

输出结果:

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对AIDI的支持。如果你想了解更多相关内容请查看下面相关链接


  • 上一条:
    使用Selenium破解新浪微博的四宫格验证码
    下一条:
    pandas 空的dataframe 插入列名的示例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 2024.07.09日OpenAI将终止对中国等国家和地区API服务(0个评论)
    • 2024/6/9最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(1个评论)
    • 国外服务器实现api.openai.com反代nginx配置(0个评论)
    • 2024/4/28最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(1个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2017-09
    • 2018-01
    • 2018-07
    • 2018-08
    • 2018-09
    • 2018-12
    • 2019-01
    • 2019-02
    • 2019-03
    • 2019-04
    • 2019-05
    • 2019-06
    • 2019-07
    • 2019-08
    • 2019-09
    • 2019-10
    • 2019-11
    • 2019-12
    • 2020-01
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-12
    • 2024-02
    • 2024-04
    • 2024-05
    • 2024-06
    • 2025-02
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客