selenium 操作

1. 安装selenium和get_webdriver

selenium和get_webdriver区别:

  • selenium:需要手动下载浏览器对应版本的驱动
  • get_webdriver:自动下载浏览器对应的驱动
pip install selenium
pip install get_webdriver

2. Python元素定位

selenium3和4的区别:selenium4 把 _by_id 去掉了,放在了参数里。

selenium4 
find_element("id","search")

selenium3
find_element_by_id(search")
find_element_by_name(search")

2.1 8大元素

# id元素定位
# name元素定位
# class元素定位
# tag定位(div、a、span等标签)
# link定位

2.2 例子

# 导入webdriver、By包
from selenium import webdriver
from selenium.webdriver.common.by import By

# 驱动路径
driver_path = r"D:\chromcdriver.ext"
# 打开谷歌浏览器
driver = webdriver.Chrome(executable_path=driver_path)
# 设置网址
driver.get("http://novel.hctestedu.com/")
# 根据ID查询,查询的值是:"searchKey"
# search_inp = driver.find_element( by=By.ID,value="searchKey")
# find_element(参数1(查找id),参数2(id的值))
search_inp = driver.find_element( "id","searchKey")
# 搜索的内容
search_inp.send_keys("就是玩")
# 根据id找到搜索框,点击搜索。
# click() 点击事件
driver.find_element(by=By.ID,value="btnSearch").click()
# 断言:判断 driver.title 如果是 "aaa",则输出aaa,否则输出bbb 
# driver.title  获取浏览器的title
assert driver.title == "aaa" , "bbb"

3. 元素操作

ele.size 获取元素的尺寸
ele.location 获取元素的坐标
ele.text 获取元素文本内容
ele.get_attribut(属性名) 获取元素的属性值
driver.current_url 获取页面的url
driver.title 获取页面的title

4. 全部

import time

from selenium import webdriver
from selenium.webdriver.common.by import By


CHROME_DRIVER = r"D:\software\Activation\chromedriver.exe"
# 创建对象
driver = webdriver.Chrome(executable_path=CHROME_DRIVER)
driver.get("https://www.baidu.com")

'''
# webdriver方法
# get()     打开浏览器
driver.get("https://www.baidu.com")
driver.get("https://www.jd.com")
time.sleep(1)

# back()    后退操作
driver.back()
time.sleep(1)

# forward()     前进操作
driver.forward()
time.sleep(1)

# refresh()     刷新页面
driver.refresh()
time.sleep(1)

# title     获取标题
print("title: ",driver.title)
# current_url 获取URL
print("current_url: ",driver.current_url)
# page_source 获取页面源码
#print("page_source: ",driver.page_source)
print("window_handles: ",driver.window_handles)

# set_window_size(宽,高)  设置浏览器窗口
driver.set_window_size(200,200)
# get_window_size()     获取浏览器窗口
print(driver.get_window_size())
# maximize_window()     浏览器窗口最大化
driver.maximize_window()

# get_screenshot_as_file()      截图
driver.get_screenshot_as_file("./img/{}_img.png".format(time.strftime("%Y%m%d-%H%M%S")))





# close()       关闭当前窗口
driver.close()

# quit()       关闭所有窗口
driver.quit()
'''


'''
# 属性定位
from selenium.webdriver.common.by import By
# ID定位
# 4版本
driver.find_element(By.ID,"kw").send_keys("就是玩")
driver.find_element(By.ID,"su").click()
# 3版本
driver.find_element_by_id("kw").send_keys("就是玩")
driver.find_element_by_id("su").click()

# name定位
# 4版本
driver.find_element(By.NAME,"wd").send_keys("就是玩")
# 3版本
driver.find_element_by_name("wd").send_keys("----就是玩")

# class定位
# 4版本
driver.find_element(By.CLASS_NAME,"s_ipt").send_keys("就是玩")
# 3版本
driver.find_element_by_class_name("s_ipt").send_keys("就是玩1111")

# tag_name 定位标签,选中第一个
driver.get("https://www.sogou.com")
# 4版本
driver.find_element(By.TAG_NAME,"input").send_keys("就是玩")
# 3版本
driver.find_element_by_tag_name("input").send_keys("----就是玩")

# link_text 定位超链接中的文本
# partial_link_text 和 link_text相似,不需要全部输入,包含“新”的超链接
# 4版本
driver.find_element(By.LINK_TEXT,"新闻").click()
driver.find_element(By.PARTIAL_LINK_TEXT,"新").click()
# 3版本
driver.find_element_by_link_text("新闻").click()
driver.find_element_by_partial_link_text("新").click()

# 一个元素和一组元素定位
# 组元素返回一个列表
find_element 没有s的是一个元素定位
find_elements 有s的是一组元素定位
# 获取li标签
list = driver.find_elements_by_tag_name("li")
# 循环打印文本
for i in list:
    print(i.text)

# xpath 定位
# 4版本
# 相对路径
driver.find_element(By.XPATH,"//span[1]/input").send_keys("-----就是玩")
# 3版本
# 绝对路径
driver.find_element_by_xpath("/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input").send_keys("就是玩")
# 相对路径
driver.find_element_by_xpath("//span[1]/input").send_keys("-----就是玩")

driver.find_element_by_xpath('//form[@id="form"]/span[1]/input').send_keys("aaaaaa")
'''

'''
# 选择器定位
# id选择器
driver.find_element_by_css_selector("#kw").send_keys("aaaa")
# class选择器
driver.find_element_by_css_selector(".s_ipt").send_keys("aaaa")
# [] 属性定位
driver.find_element_by_css_selector("[name='wd']").send_keys("aaaa")
# > 层级定位
driver.find_element_by_css_selector("form[id=form]>span>input").send_keys("aaaa")
'''

'''
# 元素操作
# send_keys() 文本输入
driver.find_element(By.ID,"kw").send_keys("就是玩")
# click()   点击事件
driver.find_element(By.ID,"su").click()
# clear()   清空文本
driver.find_element(By.ID,"kw").clear()

'''
time.sleep(1)
driver.quit()

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains


CHROME_DRIVER = r"D:\software\Activation\chromedriver.exe"
# 创建对象
driver = webdriver.Chrome(executable_path=CHROME_DRIVER)
driver.get("https://www.baidu.com")
action = ActionChains(driver)

'''
# 实例化
action = ActionChains(driver)
# 鼠标悬停
move = driver.find_element_by_id("aa")
action.move_to_element(move).perform()

# 鼠标双击
move = driver.find_element_by_id("aa")
action.double_click(move).perform()

# 滑动的三种方式
# 方式一
div1 = driver.find_element_by_id("div1")
div2 = driver.find_element_by_id("div2")
action.click_and_hold(div1).move_to_element(div2).release().perform()
# 方式二
action.drag_and_drop(div1,div2).perform()
# 方式三
print(div1.location)
print(div2.location)
# xoffset = div2的x轴减 div1的x轴
# yoffset = div2的y轴减 div1的y轴
action.drag_and_drop_by_offset(div1,xoffset=182,yoffset=0).perform()


driver.find_element(By.XPATH,"//*[@id='s-top-left']/a[5]").click()
# 多窗口操作
# 获取句柄
print(driver.window_handles)
handles = driver.window_handles
# 切换最后一个句柄
driver.switch_to.window(handles[-1])


# frame切换方式
# 方式一:找到frame的id
driver.switch_to.frame("aa")
# 方式二:通过索引
driver.switch_to.frame(0)
# 方式三:通过元素标签
driver.switch_to.frame(driver.find_elements_by_tag_name("iframe"))

driver.find_element_by_id("kw").send_keys("天气")
# 切出frame页
driver.switch_to.default_content()



# cookie注入,实现用户登陆
# uname和user_id cookie中的key
# 188888888888和1 cookie中的value
driver.add_cookie({"name":"uname","value":"188888888888"})
driver.add_cookie({"name":"user_id","value":"1"})

# 上传文件
# 点击图片搜索按钮
driver.find_element(By.XPATH,"//*[@class='soutu-btn']").click()
# 点击上传文件,输入图片路径
driver.find_element(By.XPATH,"//*[@class='upload-pic']").send_keys(r"D:\1.png")


# alert 窗口操作
# alert窗口确定操作
driver.switch_to.alert.accept()
# alert窗口取消操作
driver.switch_to.alert.dismiss()
# alert窗口输入
driver.switch_to.alert.send_keys("123")
# alert打印信息
print(driver.switch_to.alert.text)

'''
time.sleep(3)

driver.quit()
posted @ 2025-11-12 22:16  Amoヽ柠檬  阅读(10)  评论(0)    收藏  举报