selenium 知识大全

一、安装 selenium

pip install 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()					# 退出
driver.back()					# 后退
driver.refresh()				# 刷新网页 

四、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)

九、selenium 配置浏览器模式

取消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('chromedriver.exe',chrome_options=option)
driver.get('http://www.baidu.com')

设置代理

from selenium import webdriver
option = webdriver.ChromeOptions()
option.add_argument("--proxy-server=http://127.0.0.1:8888")
driver = webdriver.Chrome('chromedriver.exe',chrome_options=option)

其他常用浏览器设置

chrome_options.add_argument('--start-maximized')#浏览器最大化
chrome_options.add_argument('--window-size=1280x1024') # 设置浏览器分辨率(窗口大小)
chrome_options.add_argument('log-level=3')
chrome_options.add_argument('--user-agent=""') # 设置请求头的User-Agent
chrome_options.add_argument('--disable-infobars') # 禁用浏览器正在被自动化程序控制的提示
chrome_options.add_argument('--incognito') # 隐身模式(无痕模式)
chrome_options.add_argument('--hide-scrollbars') # 隐藏滚动条, 应对一些特殊页面
chrome_options.add_argument('--disable-javascript') # 禁用javascript
chrome_options.add_argument('--blink-settings=imagesEnabled=false') # 不加载图片, 提升速度
chrome_options.add_argument('--ignore-certificate-errors') # 禁用扩展插件并实现窗口最大化。

调试用例

# 不加载图片,加快访问速度
ch_options.add_experimental_option("prefs", {"profile.mamaged_default_content_settings.images": 2})

# 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium
ch_options.add_experimental_option('excludeSwitches', ['enable-automation'])
# ch_options.add_experimental_option("debuggerAddress", "127.0.0.1:9999")
ch_options.add_argument('--proxy--server=127.0.0.1:8080')
ch_options.add_argument('--disable-infobars')  # 禁用浏览器正在被自动化程序控制的提示
ch_options.add_argument('--incognito')
browser = webdriver.Chrome(options=ch_options)
  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值