微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

selenium 知识大全

1、安装selenium

pip intall selenium

注意: 使用该模块时需要下载驱动,注意驱动版本与浏览器版本需要一致

Chrome驱动下载地址:http://chromedriver.storage.googleapis.com/index.html
火狐驱动下载地址:http://ftp.mozilla.org/pub/firefox/releases/

基本使用

from selenium import webdriver
driver = webdriver.Chrome(驱动路径)		# 实例化对象
driver.get(网页URL)						# 加载页面
driver.close()  # 关闭浏览器一个Tab
# or
driver.quit()  # 关闭浏览器窗口

二、selenium 定位

method说明
find_element_by_name通过元素name定位
find_element_by_id通过元素id定位
find_element_by_xpath通过xpath表达式定位
find_element_by_link_text通过完整超链接定位
find_element_by_partial_link_text通过部分链接定位
find_element_by_tag_name通过标签定位
find_element_by_class_name通过类名进行定位
find_element_by_css_selector通过css选择器进行定位

如果要定位的元素有多个,那么可以把element改为elements,这样就可以匹配多个元素了。

注意:建议使用xpath语法进行查找,这样可以使得准确率更高

xpath语法

(1)标签定位

  • 在xpath表达式中最左侧的 / 表示是从根节点进行层级定位
  • 在xpath表达式中最左侧的 // 表示可以从任意位置进行定位
  • 在xpath表达式中非最左侧的 // 表示是多个层级的意思
  • 属性定位:
    • //tagName[@class="attrname"]
  • 索引定位:
    • //tagName/li[3]

(2) 提取数据

  • 取文本
    • /text() 取直系的文本内容
    • //text() 取所有的文本内容
  • 属性
    • tag/@attrname

三、selenium 控制浏览器操作

设置浏览器大小

set_window_size(480,800)		# 设置浏览器的宽、高

控制浏览器的后腿、前进

driver = webdriver.Chrome(驱动路径)
driver.forward()				# 前进
driver.quit()					# 后退

四、selenium常用用法

获取网页源码

driver.page_source

清除文本

driver.clear()

模拟点击
模拟点击一般配合标签单位来实现点击事件

driver.find_element_by_id('tag_id').click()

input框输入本文

driver.find_element_by_tag_name('input').send_key('输入的内容')

获取标签的大小、尺寸、文本内容

driver = webdriver.Chrome('../../PYTools/chromedriver87.exe')
time.sleep(2)
driver.get('https://www.baidu.com/')
content = driver.find_element_by_id('s-top-left').text					# 获取文本内容
size = driver.find_element_by_id('s-top-left').size						# 获取标签的大小
attr = driver.find_element_by_id('s-top-left').get_attribute('id')		# 获取标签的其他属性
title_img =driver.find_element_by_id('s-top-left').location				# 获取标签坐标

截图、保存图片
location 定位标签
crop 截图,以像素点坐标为依据
get_screenshot_as_file(filename) 截取当前窗口,并保存图片指定位置

# 左下角,右上角 定位标签位置
location = title_img.location 
rangle = (int(location['x'])-2, int(location['y'])-2, int(location['x'] + size['width']), int(location['y'] + size['height']))

frame = i.crop(rangle)                  # 截图
frame.save(img_name1)					# 保存图片

driver.get_screenshot_as_file(filename)

五、selenium 鼠标键盘事件

对于鼠标和键盘事件需要导入一个动作链

from selenium.webdriver.common.action_chains import ActionChains

鼠标事件

补充:

click_and_hold(block).perform() 按下滑动块
perform() 执行链中的所有动作
release(on_element=None) 在某个元素位置松开鼠标左键
click() 模拟点击

# 百度鼠标悬浮更多标签
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome('../../Tools/chromedriver.exe')
driver.get('http://www.baidu.com')
tag = driver.find_element_by_name('tj_briicon')
ActionChains(driver).move_to_element(tag).perform()

键盘事件
导入包

from selenium.webdriver.common.keys import Keys

Keys类常用方法

在这里插入图片描述

六、设置元素等待

显示等待
等待一定条件发生后再进行一步执行代码

from selenium.webdriver.support.ui import webdriverwait
webdriverwait(driver,10,0.5,ignored_exceptions=None)
# driver 对象
# 10	超时时间
# 0.5   刷新时间,检测间隔时间
# ignored_exceptions	超时后的异常信息

隐式等待
10秒持续定位元素,若定位成功则继续执行,若超过10秒未定位到元素,则抛出异常。

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome('../../Tools/chromedriver.exe')
driver.get('http://www.baidu.com')
driver.implicitly_wait(10)

七、frame切换 & 下拉框

frame 切换

driver.switch_to.frame(' id | name属性 | frame个数数字')  # 三种定位方式

先通过xpath定位元素再切换

xf = driver.driver.find_element_by_name('tag_name_attr')
driver.switch_to.frame(xf)

跳回最外层页面

driver.switch_to.default_content()

以豆瓣登录为例

......
def slide(driver):
    """滑动验证码"""
    # 认为0,在点击登录时会弹出一个frame,此时这个frame时第二个,所以用1来确定
    driver.switch_to.frame(1)		
    #找到滑块
    block = driver.find_element_by_xpath('//*[@id="tcaptcha_drag_button"]')
    #找到刷新
    reload = driver.find_element_by_xpath('//*[@id="reload"]')

代码参考原文链接:https://blog.csdn.net/qq_16146103/article/details/109180320

下拉框选择
select_by_value 以select中的value为依据

from selenium import webdriver
from selenium.webdriver.support.select import Select

driver = webdriver.Chrome('../../Tools/chromedriver.exe')
driver.get('http://www.baidu.com')
driver.implicitly_wait(10)
tag = driver.find_element_by_name('tj_briicon')
Select(tag).select_by_value('value值')
Select(tag).select_by_index('下拉索引')

八、调用JavaScript代码

windows.scrollTo(0,450) 使浏览器向下移动450像素

js = "window.scrollTo(0,450);"
driver.execute_script(js)

九、seleniumk配置浏览器模式

取消Chrome的安全下载提示

driver = webdriver.Chrome('chromedriver.exe',)       # 谷歌浏览器
# 取消chrome下载文件的安全提示
driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
# downloadpath : 指定下载路径
params = {'cmd': 'Page.setDownloadBehavior',
          'params': {'behavior': 'allow', 'downloadpath': r'C:\Users\RION\Desktop\test'}} 
driver.execute("send_command", params)

设置为无头模式

from selenium.webdriver.chrome.options import Options

option = Options()
option.add_argument('--headless')
driver = webdriver.Chrome('../../Tools/chromedriver.exe',chrome_options=option)
driver.get('http://www.baidu.com')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐