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
投稿

猜你喜欢

  • 页面中图像格式的选用之我见

    2007-10-31 18:11:00
  • 不要放弃使用CSS中的新技术

    2009-05-15 12:49:00
  • PyTorch 如何自动计算梯度

    2023-08-13 14:44:20
  • Python企业编码生成系统总体系统设计概述

    2021-03-31 09:12:19
  • JavaScript入门学习书籍的阶段选择

    2008-01-11 19:39:00
  • SQL Server如何保证可空字段中非空值唯一

    2011-02-24 16:44:00
  • win10下安装Anaconda的教程(python环境+jupyter_notebook)

    2023-11-27 13:27:08
  • Python编程实现凯撒密码加密示例

    2021-04-22 01:58:56
  • javascript 网站常用的iframe分割

    2023-08-19 09:27:58
  • Python+OpenCV实现将图像转换为二进制格式

    2021-06-25 08:10:33
  • 在pytorch中计算准确率,召回率和F1值的操作

    2022-02-13 18:06:40
  • Web标准在中国

    2008-11-26 11:27:00
  • python math模块的基本使用教程

    2022-01-30 23:07:53
  • Python OpenCV形态学运算示例详解

    2022-03-04 12:23:39
  • Apache2.4.x版wampserver本地php服务器如何让外网访问及启用.htaccess

    2023-11-04 09:27:00
  • Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法

    2023-12-19 22:42:41
  • Python实现截屏的函数

    2022-03-12 01:46:53
  • python测试开发django之使用supervisord 后台启动celery 服务(worker/beat)

    2023-10-14 05:55:53
  • Python抓取框架Scrapy爬虫入门:页面提取

    2022-04-16 18:57:47
  • XML:OpenSearch 浏览器指定搜索应用

    2010-05-04 19:37:00
  • asp之家 网络编程 m.aspxhome.com