selenium

简介

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
    • 阿里源:https://registry.npmmirror.com/binary.html?path=chromedriver/

入门

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()

取标签文本

item.find_element_by_xpath('./div[1]/div[2]/div[1]/a').text

窗口操作

切换窗口

web.switch_to.window(web.window_handles[-1])  # 跳转到最后一个窗口

关闭窗口

web.close()  

关闭浏览器

web.quit()

切换iframe

# 旧版selenium找元素方法,先找到哪个iframe
iframe = web.find_element_by_xpath('//iframe[@id="mplay"]')
# 切换到iframe
web.switch_to.frame(iframe)
val = web.find_element_by_xpath('//input[@class="dplayer-comment-input"]').get_attribute("placeholder")
print(val)

# 跳出当前iframe
web.switch_to.parent_frame()
# 取iframe外的元素文本
xxx = web.find_element_by_xpath('/html/body/div[2]/div[3]/div[2]/div/div[2]/h2').text

下拉列表框和不显示窗口

from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from selenium.webdriver.chrome.options import Options
import time
# 不开启浏览器窗口
option_browser = Options()
option_browser.add_argument("--headless")
option_browser.add_argument('--disable-gpu')
web = Chrome(options=option_browser)
web.get('https://www.endata.com.cn/BoxOffice/BO/Year/index.html')
# 切换下拉列表窗
pull_down_list = Select(web.find_element(by=By.XPATH, value='//*[@id="OptionDate"]'))
for i in range(len(pull_down_list.options)):
    # 按照索引位置切换
    pull_down_list.select_by_index(i)
    time.sleep(1)
    # selenium老版写法
    table = web.find_element_by_xpath('//*[@id="TableList"]/table')
    print("*"*30)
    print(table.text)

节点交互

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

等待

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

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

执行js

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

driver.execute_script('document.documentElement.scrollTo(0,2000)')

删除广告等遮挡

driver.execute_script("""
	var a = document.getElementsByClassName("un-login-banner")[1];
	a.parentNode.removeChild(a);
""")

动作链

链接: 演示网址

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个

红包金额最低5元

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

抵扣说明:

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

余额充值