selenium

selenium

简介

selenium:浏览器自动化的工具

链接: 文档

使用

1.Python环境中安装selenium

python 复制代码
pip install selenium

2.把驱动程序放在pycharm开发目录中

入门

python 复制代码
import time
from selenium import webdriver
# 取得谷歌浏览器驱动
driver = webdriver.Chrome()
# 打开网页
driver.get('https://www.jd.com/')
# 页面最大化
driver.maximize_window()
# 得到页面大小
print(driver.get_window_size())
# 得到网址
print(driver.current_url)
# 得到所有窗口句柄
print(driver.window_handles)
# 睡5秒,等待
time.sleep(5)
# close driver,resource recovery
driver.quit()

# driver.close() # 关闭页面

元素定位

  • 常用的有以下几种:
python 复制代码
driver.find_element(By.XPATH,'XPATH')
driver.find_element(By.CLASS_NAME,'CLASS_NAME')
driver.find_element(By.CSS_SELECTOR,'CSS_SELECTOR')
driver.find_element(By.ID,'ID')
driver.find_element(By.LINK_TEXT,'LINK_TEXT')
driver.find_element(By.PARTIAL_LINK_TEXT,'PARTIAL_LINK_TEXT')
driver.find_element(By.TAG_NAME,'TAG_NAME')
  • id定位
python 复制代码
driver.get('https://www.jd.com/')
eli = driver.find_element(By.ID,'key')
  • 超链接,根据文本进行定位,精确定位,文本不能缺错
python 复制代码
eli = driver.find_element(By.LINK_TEXT,'抢大牌好价')
eli.click()
  • 超链接,部分文本匹配,click()摸拟点击行为
python 复制代码
eli = driver.find_element(By.PARTIAL_LINK_TEXT,'牌好价').click()
  • Xpath定位
字符 说明
input 选择所有input标签,同理,可以选选div等其他标签
* 选择所有元素
/ 从当前开始选择
// 从当前及以下的任意节点选择
. 当前节点
... 父节点
@ 根据属性进行选择
[n] 返回结果的第n项

在京东搜索栏里找"奶粉"

python 复制代码
eli = driver.find_element(By.XPATH,'//*[@id="key"]').send_keys('奶粉')
eli = driver.find_element(By.XPATH,'//*[@id="search"]/div/div[2]/button').click()

节点交互

  • 输入文字时用send_keys()方法
  • 清空文字时用clear()方法
  • 点击按钮时用click()方法。

等待

因网速等原因,网页未能全部加载而找不到相应元素,需要等待加载完毕,再找查找元素

  • 强制等待
python 复制代码
time.sleep(10)
  • 隐式等待
python 复制代码
driver.implicitly_wait(15)

执行js

模拟运行JavaScript,此时使用execute_script()方法即可实现。

python 复制代码
driver.execute_script('document.documentElement.scrollTo(0,2000)')

动作链

链接: 演示网址

python 复制代码
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By

# 取得谷歌浏览器驱动
driver = webdriver.Chrome()
url = '<input clstag="h|keycount|h|keycount|head|search_c" type="text" autocomplete="off" id="key" accesskey="s" class="text" aria-label="搜索" style="background: transparent;">'
# 打开网页
driver.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
driver.implicitly_wait(15)
# eli = driver.find_element(By.ID,'key')
# eli = driver.find_element(By.PARTIAL_LINK_TEXT,'牌好价').click()
# eli = driver.find_element(By.LINK_TEXT,'牌好价')
# eli = driver.find_element(By.XPATH,'//*[@id="key"]').send_keys('奶粉')
# eli = driver.find_element(By.XPATH,'//*[@id="search"]/div/div[2]/button').click()
# 如果定位的标签在iframe标签中,需要以下语句,frame的参数可以是iframe标签的id属性
driver.switch_to.frame('iframeResult')
drag_block = driver.find_element(By.XPATH, '//*[@id="draggable"]')
# 创建动作链对象,绑定浏览器
my_action = ActionChains(driver)
# 点击并长按指定标签
my_action.click_and_hold(drag_block)
# 移动标签,perform()表示立即执行
for i in range(6):
    my_action.move_by_offset(25,25).perform()
    time.sleep(0.5)
# 睡5秒,等待
time.sleep(1)
# 释放动作链对象
my_action.release()
# close driver,resource recovery
# driver.quit()

# driver.close() # 关闭页面
相关推荐
悟能不能悟10 小时前
if __name__=‘__main__‘的用处
python
Source.Liu10 小时前
【Python基础】 15 Rust 与 Python 基本类型对比笔记
笔记·python·rust
前端世界10 小时前
Python 正则表达式实战:用 Match 对象轻松解析拼接数据流
python·正则表达式·php
DreamNotOver11 小时前
基于Scikit-learn集成学习模型的情感分析研究与实现
python·scikit-learn·集成学习
Learn Beyond Limits11 小时前
Error metrics for skewed datasets|倾斜数据集的误差指标
大数据·人工智能·python·深度学习·机器学习·ai·吴恩达
半瓶榴莲奶^_^11 小时前
python基础案例-数据可视化
python·信息可视化·数据分析
mit6.82412 小时前
[网络入侵AI检测] docs | 任务二分类与多分类
python
Source.Liu12 小时前
【Python自动化】 21.2 Pandas 读取 Excel 时的 dtype 参数完全指南
python·自动化·pandas
天上的光13 小时前
3.python——数据类型转换
python
钱彬 (Qian Bin)13 小时前
一文掌握工业缺陷检测项目实战(Pytorch算法训练、部署、C++ DLL制作、Qt集成)
c++·pytorch·python·qt·实战·工业缺陷检测·faster rcnn