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() # 关闭页面
相关推荐
voidmort31 分钟前
3. 微调(Fine-tuning)与强化学习(RL)的核心思想
python·深度学习·算法
biter down1 小时前
基于 Pywinauto 的 QQ 音乐 GUI 自动化测试实践
python
人道领域1 小时前
【LeetCode刷题日记】669.修剪二叉搜索树
开发语言·python·算法
EntyIU2 小时前
mineru从安装部署到测试使用完整指南
python·ocr
安替-AnTi3 小时前
厚朴 APK 搜索接口分析
python·apk·解析·taobao
山川湖海3 小时前
AI时代快速学编程语言的陷阱(以Python为例)
大数据·人工智能·python
H Journey3 小时前
Supervisor 进程管理工具介绍
python·supervisor·linux 运维
春日见4 小时前
5分钟入门强化学习之动态规划算法与实现
大数据·人工智能·python·算法·机器学习·计算机视觉
DeniuHe4 小时前
sklearn 中所有交叉验证数据集划分方式完整总结
人工智能·python·sklearn
DeniuHe5 小时前
sklearn中不同交叉验证方法的场景适配
人工智能·python·sklearn