python之selenium基础使用

本文详细介绍了Python使用Selenium进行网页自动化操作的基础知识,包括元素定位(如ID、Name、Class等)、鼠标和键盘事件、等待元素加载、处理警告框、上传文件、操作Cookies等,并给出了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定位:

id 定位
find_element_by_id(“kw”)
name 定位
find_element_by_name(“wd”)
class 定位
find_element_by_class_name(“s_ipt”) #输入find_element_by_class_name(“bg s_btn”) #搜索
tag定位
find_element_by_tag_name(‘input’)
link定位
find_element_by_link_text(‘hao123’)
partial link 定位 (局部定位)
find_element_by_partial_link_text(‘文本链接’)
Xpath定位
find_element_by_xpath(’/html/body/div/div[3]’)
利用元素属性定位
find_element_by_xpath(’//*[@id=“aForm”]’)
层级与属性结合
find_element_by_xpath(’//span[@class=“bg s_ipt_wr”]/input’)
使用逻辑运算符
find_element_by_xpath(’//input[@id=“kw” and @class=“su”]/span/input’)
CSS定位
1.通过class属性定位find_element_by_css_selector(’.s_ipt’)
2.通过id属性定位find_element_by_css_selector(’.bg s_btn’)
3.通过标签名定位find_element_by_css_selector(‘input’)
4.通过属性定位find_element_by_css_selector(’[name=“kw”]’)
find_element_by_css_selector(’[type=“submit”]’)
5.组合定位:find_element_by_css_selector(“from.fm>span>input.s_ipt”)

用By定位元素
from selenium.webdriver.common.by import By
find_element(By.ID,‘kw’)find_element(By.NAME,‘wd’)
find_element(By.CLASS_NAME,‘s_ipt’)
find_element(By.TAG_NAME,‘input’)
find_element(By.LINK_TEXT,‘新闻’)
find_element(By.PARTIAL_LINK_TEXT,‘新’)
find_element(By.XPATH,’//*[@class=‘bg s_btn’]’)
find_element(By.CSS_SELECTOR,‘span.bg s_btn_wr>inpu#su’)
控制浏览器大小
set_window_size(480,800) # 宽480 高800
maximize_window() # 浏览器窗口最大
浏览器的后腿,前进
driver.back()driver.forward()
浏览器刷新
driver.refresh()

鼠标事件:

perform() # 执行所有ActionChains中存储的行为
context_click() #右击
double_click() # 双击
draf_and_drop() # 拖动
move_to_element #鼠标悬停
鼠标右击操作 (鼠标悬停,双击操作一致)
from selenium import webdriver
from selenium.erbdriver.common.action_chains import ActionChains
定位到要右击的元素
right_click = driver.find_element_by_id(‘xxx’)
#对定位到的元素执行鼠标右键操作
ActionChains(driver).context_click(right_click).perform()
鼠标拖放操作
drag_and_drop(source,target) 在源元素上按住鼠标左键,然后移动到目标元素上释放。
source : 鼠标拖动的源元素
target : 鼠标释放的目标元素

from selenium import webdriver
from selenium.erbdriver.common.action_chains import ActionChains
#定位元素的原始位置
element = driver.find_element_by_id(‘xx’)
#定位元素要移动到的目标位置
target = driver.find_element_by_id(‘xx’)
#执行元素的拖放操作
ActionChains(driver).drag_and_drop(element,target).perrform()

键盘事件:

from selenium import webdriver # 引入Keys模块
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get(‘http:www.baidu.com’)
#输入框输入内容
driver.find_element_by_id(‘kw’).send_keys(“seleniumm”)
#删除多输入的一个m
driver.find_element_by_id(‘kw’).send_keys(Keys.BACK_SPACE)
#输入空格键 + “教程”
driver.find_element_by_id(‘kw’).send_keys(Keys.SPACE)
driver.find_element_by_id(‘kw’).send_keys(‘教程’)
#ctrl + a 全选输入框内容
driver.find_element_by_id(‘kw’).send_keys(Keys.CONTROL,‘a’)
#ctrl + x 剪切输入框内容
driver.find_element_by_id(‘kw’).send_keys(Keys.CONTROL,‘x’)
#ctrl + v 粘贴内容到输入框
driver.find_element_by_id(‘kw’).send_keys(Keys.CONTROL,‘v’)
#通过回车键来代替单击操作
driver.find_element_by_id(‘su’).send_keys(Keys.ENTER)
driver.quit()
常用的键盘操作
send_keys(Keys.BACK_SPACE) #删除键(backspace)
send_keys(Keys.SPACE) #空格键(space)
send_keys(Keys.TAB) #制表键(tab)
send_keys(Keys.ESCAPE) #回退键(ESC)
send_keys(Keys.ENTER) #回车键(enter)
send_keys(Keys.CONTROL,‘a’) #全选(Ctrl + A )
send_keys(Keys.CONTROL,‘c’) #复制(Ctrl + C)
send_keys(Keys.CONTROL,‘x’) #剪切(Ctrl + X)
send_keys(Keys.CONTROL,‘v’) #粘贴(Ctrl + V)
send_keys(Keys.F1) # 键盘F1
。。。
send_keys(Keys.F12) #键盘F12

设置等待元素:

webDriver 提供了两种类型的等待(显示等待,隐示等待)
显示等待

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get(“http://www.baidu.com”)
element = WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,‘kw’)) )
element.send_keys(‘selenium’)
driver.quit()

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver : 浏览器驱动
timeout : 最长超时时间,默认以秒未单位
poll_frequency : 检测的间隔(步长)时间,默认为0.5S
ignored_exceptions : 超时后的异常信息,默认情况下抛NoSuchElementException异常
WebDriverWait() 一般由unti() 或 until_not() 方法配合使用
下面是until 和 until_not()方法的使用
until(method,message="")调用该方法提供的驱动程序作为一个参数,直到返回值为True
until_not(method,message="")调用方法提供的驱动程序作为一个参数,直到返回值为Flase
在本列中,通过as 关键字将expected_codittions 重命名为EC,并调用
presence_of_element_located()方法判断元素是否存在

隐示等待(implicitly_wait())
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import ctime, time

driver = webdriver.Chrome()
#设置隐示等待为10秒
driver.implicitly_wait(10)
driver.get(‘http://www.baidu.com’)
try:
print(ctime())
driver.find_element_by_id(‘kw22’).send_keys(‘selenium’)except NoSuchElementException as e:
print(e)
finally:
print(ctime())
driver.quit()
睡眠
from time import sleep
sleep(2)
sleep(3)

单选按钮:

from selenium import webdriver
import os ,time
driver = webdriver.Chrome()

finle_path = ‘file:///’ + os.path.abspath(‘checkbox.html’)
driver.get(finle_path)

#选择页面上所有的tag,name为input的元素
inputs = driver.find_element_by_tag_name(‘input’)

#然后从中过滤出type为checkbox的元素,单击按钮
for i in inputs:
if i.get_attribute(‘type’) == ‘checkbox’:
i.click()
time.sleep()
driver.quit()
在上面的列子中先通过find_element_by_tag_name()找到一组标签为input的元素。然后通过for循环进行遍历,在遍历过程中,通过该
get_attrbute()方法获取元素的type属性是否为“CheckBox”,如果是,就认为这个元素是一个复选框,对其进行勾选操作。
CheckBox.py
from selenium import webdriver
import os,time

driver = webdriver.Chrome()
file_path = ‘file:///’ + os.path.abspath(“checkbox.html”)
driver.get(file_path)

#通过xpath 找打type=checkbox 的元素
#checkboxs = driver.find_element_by_xpath("//input[@type=‘checkbox’]")

#通过CSS 找到type = checkbox 的元素
checkboxs = driver.find_element_by_css_selector(‘input[type=checkbox]’)
for checkbox in checkboxs:
checkbox.click()
time.sleep(2)
#打印当前页面上type为CheckBox的个数print(len(checkboxs))
#把页面上最后一个CheckBox的钩给去掉
driver.find_element_by_css_selector(‘input[type=checkbox]’).pop().click()
driver.quit()
pop() 方法用于获取列表中的一个元素(默认为最后一个元素)
pop()或pop(-1) # 默认获取最后一个元素
pop(0) # 默认获取一组元素中的第一个
pop(1) # 默认获取一组元素中的第二个

多表单切换:

定位不到数据 首先先切进ifarme
#切换到iframe(id=“if”)
driver.switch_to.frame(“if”)
#先通过xpath定位到iframe
xf = driver.find_element_by_xpath("//*[@class=‘if’]")
#再将定位对象传给switch_to_frame() 方法
driver.switch_to.frame(xf)…
driver.switch_to.parent_frame()
如果完成了当前表单上的操作,则可以通过switch_to.parent_content()方法跳出当前一级表单。
当方法默认对应于离它最近的switch_to.frame()方法。
除此之外,在进入多级表单的情况下,还可以通过swi_to.defalut_content()跳回最外层的页面。
切换窗口:
eg:在页面操作的过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作。WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切换。
以百度首页和百度注册页为例。
1、current_window_handle: 获取当前窗口句柄
2、window_handles: 返回所有窗口的句柄到当前回话
3、switch_to.window(): 用户切换到相应的窗口,与上一节的switch_to.frame()类似,前者用于不同窗口的切换,后者用于不同表单之间的切换
from selenium import webdriverimport time

driver = webdriver.Chrome()
driver.implicitly_wait(10)# 隐示等待10秒
driver.get(“http://www.baidu.com”)
driver.maximize_window()# 窗口最大化
#获得百度搜索窗口句柄
sreach_windows = driver.current_window_handle
driver.find_element_by_link_text(“登录”).click()
driver.find_element_by_link_text(“立即注册”).click()
#获得当前所有打开窗口的句柄
all_handles = driver.window_handles
#进入注册窗口
for handle in all_handles:
if handle != sreach_windows:
driver.switch_to.window(handle)
print(‘now register window!’)
driver.find_element_by_name(“userName”).send_keys(“cuiccccc”)
driver.find_element_by_name(“phone”).send_keys(“13067886396”)
time.sleep(2)
#回到搜索窗口
for handle in all_handles:
if handle == sreach_windows:
driver.switch_to.window(handle)
print(‘now sreach window!’)
driver.find_element_by_id(‘TANGRAM__PSP_4__closeBtn’).click()
driver.find_element_by_id(“kw”).send_keys(“selenium”)
driver.find_element_by_id(“su”).click()
time.sleep(2)

driver.quit()

警告框的处理:

1、text: 返回alert/confirm/prompt中的文字信息
2、accpet(): 接受现有警告框
3、dismiss(): 解除现有警告框
4、send_keys(keysToSend): 发送文本至警告框。 keysToSend:将文本发送至警告框
driver.switch_to_alert().accept() # 方法接受这个弹窗

上传文件:

send_keys 实现上传
from selenium import webdriverimport os
driver = webdriver.Chrome()
file_path = ‘file:///’ + os.path.abspath(‘upfile.html’)
driver.get(file_path)
#定位上传按钮,添加本地文件
driver.find_element_by_name(‘file’).send_keys(“D:\upload_file.txt”)
driver.quit()
上传文件:
from selenium import webdriver
import os
#为了让firefox浏览器能实现文件下载,我们需要通过firefoxProfile() 对其做一些设置
fp = webdriver.FirefoxProfile()
fp.set_preference(“browse.download.folderList”,2)
fp.set_perference(“browse.download.manager.showWhenStarting”,False)
fp.set_perference(“browse.download.dir”,os.getcwd())
#下载文件的类型
fp.set_perference(“browse.helperApps.neverAsk.saveToDisk”,“application/octet-stream”)
driver = webdriver.Chrome()
driver.get(“http:///pypi.Python.org/pypi/selenium”)
driver.find_element_by_partial_link_text(“selenium-2”).click()

1、browser.download.folderList
设置成0代表下载到浏览器默认下载路径,设置成2则可以保存到指定目录
2、browser.download.manager.showWhenStarting
是否显示开始:True为显示,Flase为不显示
3、browser.download.dir
用于指定所下载文件的目录。os.getcwd() 函数不需要传递参数,用于返回当前的目录。
4、browser.helperApps.neverAsk.saveToDisk
指定要下载页面的Content-type 值,“application/octet-stream”为文件的类型。

操作cookie:

Webdirver 操作cookie的方法
1.get_cookies(): # 获取所有的cookie信息
2.get_cookie(name): # 返回字典的key为“name”的cookie信息
3.add_cookie(cookie_dict) # 添加cookie。“cookie_dict”指字典对象,必须有name和value
4.delete_cookie(name,optionsString): # 删除cookie信息,“name”是要删除的cookie的名称,“optionsString”是该cookie的选项,目前支持的选项包括“路径”,“域”。
5.delete_all_cookiees(): # 删除所有cookie信息
获取浏览器cookie信息
from selenium import webdriver
import os
driver = webdriver.Chrome()
driver.get(“http://www.baidu.com”)
#获取cookie信息
cookie = driver.get_cookies()# 将获得cookie的信息打印print(cookie)
driver.quit()

想浏览器中写入cookie信息
from selenium import webdriver
driver = webdriver.Chrome()
driver.get(“http://www.youdao.com”)
#向cookie 的name 和 value中添加回话
driver.add_cookie({“name”:“key-aaaaa”,“value”:“value-bbbbb”})

#遍历cookies中的name和value信息并打印,当然还有上面添加的信息for cookie in driver.get_cookies():
print("%s -》%s "%(cookie[“name”],cookie[“value”]))

driver.quit()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值