selenium
selenium
- 简介
- 使用
- 1.Python环境中安装selenium
- 2.把驱动程序放在pycharm开发目录中
- 入门
- **元素定位**
- 节点交互
- 等待
- 执行js
- 动作链
简介
selenium:浏览器自动化的工具
链接: 文档
使用
1.Python环境中安装selenium
pip install selenium
2.把驱动程序放在pycharm开发目录中
- 下载与浏览器对应的驱动程序:
- http://chromedriver.storage.googleapis.com/index.html
- 驱动和浏览器版本的对应表:
- http://blog.csdn.net/huilan_same/article/details/51896672
入门
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() # 关闭页面
元素定位
- 常用的有以下几种:
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定位
driver.get('https://www.jd.com/')
eli = driver.find_element(By.ID,'key')
- 超链接,根据文本进行定位,精确定位,文本不能缺错
eli = driver.find_element(By.LINK_TEXT,'抢大牌好价')
eli.click()
- 超链接,部分文本匹配,click()摸拟点击行为
eli = driver.find_element(By.PARTIAL_LINK_TEXT,'牌好价').click()
- Xpath定位
字符 | 说明 |
---|---|
input | 选择所有input标签,同理,可以选选div等其他标签 |
* | 选择所有元素 |
/ | 从当前开始选择 |
// | 从当前及以下的任意节点选择 |
. | 当前节点 |
… | 父节点 |
@ | 根据属性进行选择 |
[n] | 返回结果的第n项 |
在京东搜索栏里找“奶粉”
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()
方法。
等待
因网速等原因,网页未能全部加载而找不到相应元素,需要等待加载完毕,再找查找元素
- 强制等待
time.sleep(10)
- 隐式等待
driver.implicitly_wait(15)
执行js
模拟运行JavaScript,此时使用execute_script()
方法即可实现。
driver.execute_script('document.documentElement.scrollTo(0,2000)')
动作链
链接: 演示网址
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() # 关闭页面