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() # 关闭页面
相关推荐
孟健13 小时前
Karpathy 用 200 行纯 Python 从零实现 GPT:代码逐行解析
python
码路飞15 小时前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
曲幽17 小时前
FastAPI压力测试实战:Locust模拟真实用户并发及优化建议
python·fastapi·web·locust·asyncio·test·uvicorn·workers
敏编程1 天前
一天一个Python库:jsonschema - JSON 数据验证利器
python
前端付豪1 天前
LangChain记忆:通过Memory记住上次的对话细节
人工智能·python·langchain
databook1 天前
ManimCE v0.20.1 发布:LaTeX 渲染修复与动画稳定性提升
python·动效
花酒锄作田1 天前
使用 pkgutil 实现动态插件系统
python
前端付豪2 天前
LangChain链 写一篇完美推文?用SequencialChain链接不同的组件
人工智能·python·langchain
曲幽2 天前
FastAPI实战:打造本地文生图接口,ollama+diffusers让AI绘画更听话
python·fastapi·web·cors·diffusers·lcm·ollama·dreamshaper8·txt2img
老赵全栈实战2 天前
Pydantic配置管理最佳实践(一)
python