关于Python Selenium的基本用法

Selenium 作为一款 Web 自动化测试框架,提供了诸多操作浏览器的方法,本节对其中的常用方法做详细介绍。

定位节点

Selenium 提供了 8 种定位单个节点的方法,如下所示:

方法说明
find_element_by_id()通过 id 属性值定位
find_element_by_name()通过 name 属性值定位
find_element_by_class_name()通过 class 属性值定位
find_element_by_tag_name()通过 tag 标签名定位
find_element_by_link_text()通过标签内文本定位,即精准定位。
find_element_by_partial_link_text()通过标签内部分文本定位,即模糊定位。
find_element_by_xpath()通过 xpath 表达式定位
find_element_by_css_selector()通过 css 选择器定位

假设下面代码某个页面的代码片段,如下所示:

  1. <form id="form" class="fm" name="f" action="c.biancheng.net">
    
  2.  <span class="btn"></span>
    
  3.  <input id="kw" class="s_ipt_wr" name="wd" value="" maxlength="255"autocomplete="off">
    

下面使用表格中提供的方法定位 input 输出框。如下所示:

  1. #创建browser是浏览器对象
  2. browser = webdriver.Chrome()
  3. #访问某个url得到上述代码片段
  4. browser.get(‘url’)
  5. #通过id定义输入框
  6. browser.dr.find_element_by_id(“kw”)
  7. #通过class定义
  8. browser.find_element_by_class_name(“s_ipt_wr”)
  9. #通过name定位
  10. browser.find_element_by_name(“wd”)
  11. #通过tag name定位:
  12. browser.find_element_by_tag_name(“input”)
  13. #通过xpath定位
  14. browser.find_element_by_xpath(“//*[@id=‘kw’]”)
  15. #通过css选择器定位
  16. browser.find_element_by_css_selector(“#kw”)

通过 a 标签内的文本内容定位节点,如下所示:

**

<a class="vip" href="http://c.baincheng.net">C语言中文网</a>
<a class="search" href="http://www.baidu.com">hao123</a>

示例如下:

  1. #使用全部文本内容定位链接
  2. browser.find_element_by_link_text(“c语言中文网”)
  3. #使用部分文本内容定位链接
  4. browser.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()

定位一组元素的方法与定位单个元素类似,唯一的区别就是 element 后面多了一个 s(表示复数),因此上述方法的返回值是一个列表,您可以使用 for 循环拿到所有的元素节点。

控制浏览器

Selenium 可以操控浏览器的窗口大小、刷新页面,以及控制浏览器的前进、后退等

1) 设置浏览器窗口大小、位置
  1. from selenium import webdriver
  2. driver = webdriver.Chrome()
  3. driver.get(“http://www.baidu.com”)
  4. #参数数字为像素点
  5. driver.set_window_size(480, 800)
  6. #设置窗口位置
  7. driver.set_window_position(100,200)
  8. #同时设置窗口的大小和坐标
  9. driver.set_window_rect(450,300,32,50)
  10. #退出浏览器
  11. driver.quit()
2) 控制网页前进、后退、刷新页面
  1. from selenium import webdriver
  2. driver = webdriver.Chrome()
  3. 访问C语言中文网首页

  4. first_url= ‘http://c.biancheng.net’
  5. driver.get(first_url)
  6. 访问c语言教程

  7. second_url=‘http://c.biancheng.net/c/’
  8. driver.get(second_url)
  9. 返回(后退)到c语言中文网首页

  10. driver.back()
  11. 前进到C语言教程页

  12. driver.forward()
  13. 刷新当前页面相当于F5

  14. driver.refresh()
  15. 退出/关闭浏览器

  16. driver.quit()

WebDriver常用方法

上文中介绍了如何定位元素,以及如何设置浏览的大小、位置。 定位元素节点只是第一步, 定位之后还需要对这个元素进行操作, 比如单击按钮,或者在输入框输入文本 , 下面介绍 WebDriver 中的最常用方法:

**

# 请求url
get(url)
# 模拟键盘输入文本
send_keys (value)
# 清除已经输入的文本
clear():
# 单击已经定位的元素
click():
# 用于提交表单,比如百度搜索框内输入关键字之后的“回车” 操作
submit():
#返回属性的属性值,返回元素的属性值,可以是id、name、type 或其他任意属性
get_attribute(name)
# 返回布尔值,检查元素是否用户可见,比如 display属性为hidden或者none
is_displayed() 

示例如下:

  1. from selenium import webdriver
  2. import time
  3. driver = webdriver.Chrome()
  4. driver.get(“https://www.baidu.com”)
  5. #模拟键盘,输出文本
  6. driver.find_element_by_id(“kw”).send_keys(“C语言中文网”)
  7. #单击“百度”一下查找
  8. driver.find_element_by_id(“su”).click()
  9. time.sleep(3)
  10. #退出浏览器
  11. driver.quit()

除了上述方法外, WebDriver 还有一些常用属性,如下所示:

  1. from selenium import webdriver
  2. driver = webdriver.Chrome()
  3. 获取HTML结构源码

  4. driver.page_source
  5. #在源码中查找指定的字符串
  6. driver.page_source.find(‘字符串’)
  7. 返回百度页面底部备案信息

  8. text = driver.find_element_by_id(“cp”).text
  9. print(text)
  10. 获取输入框的尺寸

  11. size = driver.find_element_by_id(‘kw’).size
  12. print(size)

输出结果:

**

©2015 Baidu 使用百度前必读 意见反馈 京 ICP 证 030173 号

{'width': 500, 'height': 22}

Selenium事件处理

Selenium WebDriver 提供了一些事件处理函数(鼠标、键盘等),下面我们对常用的事件函数做简单介绍。

1) 鼠标事件

Selenium WebDriver 将关于鼠标的操作方法都封装在 ActionChains 类中,使用时需要引入 ActionChains 类,如下所示:

**

from selenium.webdriver.common.action_chains import ActionChains

该类包含了鼠标操作的常用方法:

方法说明
ActionChains(driver)构造 ActionChains 鼠标对象。
click()单击
click_and_hold(on_element=None)单击鼠标左键,不松开
context_click()右击
double_click()双击
drag_and_drop()拖动
move_to_element(above)执行鼠标悬停操作
context_click()用于模拟鼠标右键操作, 在调用时需要指定元素定位。
perform()将所有鼠标操作提交执行。

示例如下:

  1. from selenium import webdriver
  2. #导入 ActionChains 类
  3. from selenium.webdriver.common.action_chains import ActionChains
  4. driver = webdriver.Chrome()
  5. driver.get(“http://c.biancheng.net”)
  6. 通过xpath表达式定位到要悬停的元素

  7. above = driver.find_element_by_xpath(‘//ul[@id=“ad-link-top”]/li[1]’)
  8. 对定位到的元素执行鼠标悬停操作

  9. ActionChains(driver).move_to_element(above).perform()
2) 键盘事件

Selenium WebDriver 的 Keys 模块提供了模拟键盘输入的 send_keys() 方法,除此之外,该模块也提供了操作键盘的其他方法,比如复制、粘贴等等。

在使用之前,首先需要导入 Keys 类,如下所示:

**

from selenium.webdriver.common.keys import Keys

下面列举了一些常用方法:

方法说明
send_keys(Keys.BACK_SPACE)删除键(BackSpace)
send_keys(Keys.SPACE)空格键(Space)
send_keys(Keys.TAB)制表键(Tab)
send_keys(Keys.ESCAPE)回退键(Esc)
send_keys(Keys.ENTER)回车键(Enter)
send_keys(Keys.CONTROL,‘a’)全选(Ctrl+A)
send_keys(Keys.CONTROL,‘c’)复制(Ctrl+C)
send_keys(Keys.CONTROL,‘x’)剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’)粘贴(Ctrl+V)
send_keys(Keys.F1…Fn)键盘 F1…Fn
keys.down(value,element=None)按下键盘上的某个键
keys.up(value,element=None)松开键盘上的某个键

示例如下:

  1. from selenium import webdriver
  2. 引入 Keys 模块

  3. from selenium.webdriver.common.keys import Keys
  4. driver = webdriver.Chrome()
  5. driver.get(“http://www.baidu.com”)
  6. 输入框输入内容

  7. driver.find_element_by_id(“kw”).send_keys(“C语言中文网H”)
  8. 删除多输入的一个H

  9. driver.find_element_by_id(“kw”).send_keys(Keys.BACK_SPACE)
  10. #单击“百度”一下查找
  11. driver.find_element_by_id(“su”).click()
  12. time.sleep(3)
  13. driver.quit()

其它键盘操作方法,如下所示:

  1. 输入空格键 + “Python教程”

  2. driver.find_element_by_id(“kw”).send_keys(Keys.SPACE)
  3. driver.find_element_by_id(“kw”).send_keys(“Python教程”)
  4. ctrl+a 全选输入框内容

  5. driver.find_element_by_id(“kw”).send_keys(Keys.CONTROL, ‘a’)
  6. ctrl+x 剪切输入框内容

  7. driver.find_element_by_id(“kw”).send_keys(Keys.CONTROL, ‘x’)
  8. ctrl+v 粘贴内容到输入框

  9. driver.find_element_by_id(“kw”).send_keys(Keys.CONTROL, ‘v’)
  10. 使用回车键来代替单击操作click

  11. driver.find_element_by_id(“su”).send_keys(Keys.ENTER)

无界面浏览器

Chromedriver 每一次运行都要打开浏览器,并执行相应的输入、搜索等操作,这样会导致浏览器交互能力变差,浪费许多时间。 Selenium 为了增强浏览器的交互能力,允许您使用无头浏览器模式,也就是无界面浏览器,它被广泛的应用于爬虫和自动化测试中。通过以下代码可以设置无头浏览器模式:

  1. from selenium import webdriver
  2. import time
  3. options=webdriver.ChromeOptions()
  4. options.add_argument(‘–headless’)#无界面浏览
  5. driver=webdriver.Chrome(options=options)
  6. driver.get(‘https://www.baidu.com’)
  7. kw1=driver.find_element_by_id(‘kw’)
  8. print(driver.title)
  9. time.sleep(3)
  10. #关闭当前界面,只有一个窗口
  11. driver.close()
  12. #关闭所有界面
  13. driver.quit()

除了可以设置无头界面之外,Selenium 还支持其他一些浏览器参数设置,如下所示:

**

opption.add_argument('--window-size=600,600') #设置窗口大小
opption.add_argument('--incognito') #无痕模式
opption.add_argument('--disable-infobars') #去掉chrome正受到自动测试软件的控制的提示
opption.add_argument('user-agent="XXXX"') #添加请求头
opption.add_argument("--proxy-server=http://200.130.123.43:3456")#代理服务器访问
opption.add_experimental_option('excludeSwitches', ['enable-automation'])#开发者模式
opption.add_argument('blink-settings=imagesEnabled=false')  #禁止加载图片
opption.add_argument('lang=zh_CN.UTF-8') #设置默认编码为utf-8
opption.add_extension(create_proxyauth_extension(
           proxy_host='host',
           proxy_port='port',
           proxy_username="username",
           proxy_password="password"
       ))# 设置有账号密码的代理
opption.add_argument('--disable-gpu')  # 这个参数可以规避谷歌的部分bug
opption.add_argument('--disable-javascript')  # 禁用javascript
opption.add_argument('--hide-scrollbars')  # 隐藏滚动条

执行JS脚本

WebDriver 提供了 execute_script() 方法来执行 JavaScript 代码,比如控制浏览器的滚动条。示例如下:

  1. from selenium import webdriver
  2. from time import sleep
  3. 访问百度

  4. driver=webdriver.Chrome()
  5. driver.get(“http://www.baidu.com”)
  6. 最大化浏览器窗口

  7. driver.maximize_window()
  8. 搜索

  9. driver.find_element_by_id(“kw”).send_keys(“C语言中文网”)
  10. driver.find_element_by_id(“su”).click()
  11. sleep(3)
  12. 通过js代码设置滚动条位置,数值代表(左边距,上边距)

  13. js=“window.scrollTo(100,500);”
  14. #执行js代码
  15. driver.execute_script(js)
  16. sleep(5)
  17. driver.quit()

如果想了解更多关于 Selenium 的知识,请参考官方文档:https://www.selenium.dev/documentation/en/

这里给大家分享一份Python全套学习资料,包括学习路线、软件、源码、视频、面试题等等,都是我自己学习时整理的,希望可以对正在学习或者想要学习Python的朋友有帮助!

优快云大礼包:全网最全《全套Python学习资料》免费分享🎁

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉优快云大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

5️⃣Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
上述所有资料 ⚡️ ,朋友们如果有需要 📦《全套Python学习资料》的,可以扫描下方二维码免费领取 🆓
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉优快云大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

### Python Selenium 基本方法及示例 #### 一、安装与初始化 为了使用 Selenium,在开始之前需要先完成环境搭建。可以通过以下命令安装 Selenium 库[^5]: ```bash pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple ``` 接着,导入 `webdriver` 模块并指定要使用的浏览器驱动程序。以下是 Chrome 浏览器的初始化示例代码[^3]: ```python from selenium import webdriver driver = webdriver.Chrome() ``` 如果需要配置其他选项(如无头模式),可以引入 `ChromeOptions` 类进行设置。 --- #### 二、访问网页 通过调用 `get()` 方法可以让 WebDriver 打开目标 URL 页面。例如: ```python driver.get("https://www.example.com") ``` 此操作会加载指定页面,并等待其完全渲染完毕后再继续执行后续脚本[^1]。 --- #### 三、元素定位 Selenium 提供了多种方式用于查找 HTML 文档中的特定节点或区域。常见的有 ID、名称、类名、标签名以及更复杂的 XPath 和 CSS Selectors 表达式等[^2]。下面列举几个典型例子: - **按 ID 查找** ```python element = driver.find_element_by_id("myId") ``` - **按 Class Name 查找** ```python elements = driver.find_elements_by_class_name("className") ``` - **利用 By 枚举类型统一接口** ```python from selenium.webdriver.common.by import By element = driver.find_element(By.ID, "myId") elements = driver.find_elements(By.CLASS_NAME, "className") ``` 上述两种风格均可实现相同功能;推荐后者因为更加灵活通用[^4]。 --- #### 四、交互操作 找到目标控件之后就可以对其进行各种模拟用户行为的操作了,比如输入文字、点击按钮等等。这里给出一些基础示范: - 向文本框发送字符串: ```python input_field = driver.find_element(By.NAME, 'username') input_field.send_keys('test_user') ``` - 单击某个链接或者按钮: ```python submit_button = driver.find_element(By.XPATH, '//button[@type="submit"]') submit_button.click() ``` 注意:某些动态生成的内容可能不会立即显现出来,此时应该考虑加入显式等待机制以提高稳定性。 --- #### 五、获取数据 除了操控界面外,我们还经常需要读取当前显示的信息作为下一步处理依据。这通常涉及到属性值提取或是内部HTML结构解析等工作。 - 获取某项的可见文本: ```python text_content = some_element.text ``` - 查询特定属性的值: ```python href_value = anchor_tag.get_attribute('href') ``` 以上就是关于如何运用PythonSelenium库开展简单任务的主要介绍。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值