selenium环境搭建及基本元素定位方式详解

作者:少壮不努力123 时间:2021-12-09 14:53:33 

谷歌驱动下载地址:

http://chromedriver.storage.googleapis.com/index.html

一、selenium简介

由于requests模块是一个不完全模拟浏览器行为的模块,只能爬取到网页的HTML文档信息,无法解析和执行CSS、JavaScript代码,因此需要我们做人为判断;

1、什么是selenium selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法执行javaScript代码的问题。selenium模块本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器;由于selenium解析执行了CSS、JavaScript所以相对requests它的性能是低下的;

2、selenium的用途

1)selenium可以驱动浏览器自动执行自定义好的逻辑代码,也就是可以通过代码完全模拟成人类使用浏览器自动访问目标站点并操作,那我们也可以拿它来做爬虫。

2)selenium本质上是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等...进而拿到网页渲染之后的结果,可支持多种浏览器

二、selenium的安装与测试

1、下载selenium模块:pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium或者在pycharm中下载

2、安装浏览器驱动1) Google浏览器驱动(在下载驱动之前,查看一下chrome浏览器的版本号,如下:

    1)谷歌驱动下载地址:

 http://chromedriver.storage.googleapis.com/index.html

当然也可以去官网找最新的版本,官网: https://sites.google.com/a/chromium.org/chromedriver/downloads另外注意:把下载好的chromedriver.exe放到python安装路径的scripts目录中即可

    2) firefox浏览器驱动:selenium3默认支持的webdriver是Firfox,而Firefox需要安装geckodriver下载链接:https://github.com/mozilla/geckodriver/releases

     3) 测试是否安装成功

from selenium import webdriver
browser=webdriver.Chrome()
# # 打开浏览器
browser.get('https://baidu.com')
s=browser.find_element_by_id('kw') # 其中kw便是页面中某个元素的id值
print(s)

2.1 设置浏览器驱动

from selenium import webdriver
driver = webdriver.Firefox() # Firefox浏览器
driver = webdriver.Chrome() # Chrome浏览器
driver = webdriver.Ie() # Ie浏览器
driver = webdriver.Edge() # Edge浏览器
driver = webdriver.PhantomJS() # PhantomJS()

2.2 Selenium 元素定位

<html>
 <head>
 <body link="#0000cc">
   <a id="result_logo" href="/" onmousedown="return c({'fm':'tab','tab':'logo'})">
   <form id="form" class="fm" name="f" action="/s">
     <span class="soutu-btn"></span>
       <input id="kw" class="s_ipt" name="wd" value="" maxlength="255" autocomplete="off">
# 通过 id 定位
dr.find_element_by_id("kw")

# 通过name定位:
dr.find_element_by_name("wd")

# 通过class name定位:
dr.find_element_by_class_name("s_ipt")

# 通过tag name定位:
dr.find_element_by_tag_name("input")

# 通过 xpath 定位的几种写法
dr.find_element_by_xpath("//*[@id='kw']")
dr.find_element_by_xpath("//*[@name='wd']"
)dr.find_element_by_xpath("//input[@class='s_ipt']")
dr.find_element_by_xpath("/html/body/form/span/input")
dr.find_element_by_xpath("//span[@class='soutu-btn']/input")
dr.find_element_by_xpath("//form[@id='form']/span/input")
dr.find_element_by_xpath("//input[@id='kw' and @name='wd']")

# 通过 css 定位的几种写法
dr.find_element_by_css_selector("#kw")
dr.find_element_by_css_selector("[name=wd]")
dr.find_element_by_css_selector(".s_ipt")
dr.find_element_by_css_selector("html > body > form > span > input")
dr.find_element_by_css_selector("span.soutu-btn> input#kw")
dr.find_element_by_css_selector("form#form > span > input")

# 通过 link_text 定位
dr.find_element_by_link_text("新闻")
dr.find_element_by_link_text("hao123")
dr.find_element_by_partial_link_text("新")
dr.find_element_by_partial_link_text("hao")
dr.find_element_by_partial_link_text("123")

# 如果是定位一组元素,用下面
find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_xpath()
find_elements_by_css_selector()

三、selenium的使用

所谓模拟浏览器基本就是下面的流程:

请求

显示页面

查找元素

点击可点击元素

所以如何使用selenium找到页面中的标签,进而触发标签事件,就会变的尤为重要

1. selenium选择器
要想定位页面的元素,selenium也提供了一系列的方法。
1) 通过标签id属性进行定位
browser.find_element_by_id('kw') # 其中kw便是页面中某个元素的id值
2) 通过标签name属性进行定位
# 两种方式是一样的
browser.find_element_by_name("wd") # 其中wd是页面中某个元素的name值
3) 通过标签名进行定位
browser.find_element_by_tag_name("img") # img参数表示的就是图片标签img
4) 通过CSS查找方式进行定位
browser.find_elements_by_css_selector("#kw") # 根据选择器进行定位查找,其中#kw表示的是id选择器名称是kw的
5) 通过xpath方式定位
browser.find_element_by_xpath('//*[@id="kw"]') # 参数即是xpath的语法
6) 通过搜索页面中链接进行定位
有时候不是一个输入框也不是一个按钮,而是一个文字链接,我们可以通过link
browser.find_element_by_link_text("设置")
通过搜索页面中链接进行定位 ,可以支持模糊匹配**
browser.find_element_by_partial_link_text("百度") # 查找页面所有的含有百度的文字链接

来源:https://www.cnblogs.com/zongchen/p/17291473.html

标签:selenium,环境,搭建,元素,定位
0
投稿

猜你喜欢

  • MySQL存储引擎InnoDB与Myisam的区别分析

    2024-01-18 13:34:50
  • 跨浏览器让javascript文件携带图片数据

    2011-03-31 17:12:00
  • sql通过日期判断年龄函数的示例代码

    2024-01-13 21:01:02
  • 利用Python实现普通视频变成动漫视频

    2023-02-05 05:13:59
  • 关于Python函数参数的进阶用法

    2023-10-06 12:03:41
  • golang 实现并发求和

    2024-02-02 07:15:58
  • 解读SQL一些语句执行后出现异常不会回滚的问题

    2024-01-22 12:52:59
  • 如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单

    2022-08-02 13:14:35
  • Python使用pickle模块报错EOFError Ran out of input的解决方法

    2021-06-03 02:56:57
  • Laravel框架执行原生SQL语句及使用paginate分页的方法

    2023-11-24 00:27:24
  • python 实现视频 图像帧提取

    2023-12-30 19:29:40
  • Django如何实现防止XSS攻击

    2022-04-13 10:52:39
  • 微信小程序indexOf的替换方法(推荐)

    2024-04-16 09:51:11
  • php引用计数器进行垃圾收集机制介绍

    2023-10-07 22:41:55
  • Symfony2之session与cookie用法小结

    2023-11-22 02:58:30
  • Python 读取xml数据,cv2裁剪图片实例

    2021-07-18 00:08:08
  • 一个免刷新页面的JavaScript日历

    2007-12-26 12:57:00
  • JS:firefox 兼容性问题

    2009-08-01 16:20:00
  • python实现递归查找某个路径下所有文件中的中文字符

    2021-12-11 09:13:18
  • Python创建字典的八种方式

    2021-02-05 20:43:18
  • asp之家 网络编程 m.aspxhome.com