from selenium.webdriver import Chrome
from selenium.webdriver.chrome.service import Service
# 创建一个 service 对象 指定驱动位置
service = Service(executable_path="./chromedriver")# 启动selenium
browser = Chrome(service=service)# 打开页面# 使用创建好的驱动 发送 get 请求打开指定网址
browser.get("https://www.baidu.com")
import time
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.service import Service
# 创建一个 service 对象 指定驱动位置
service = Service(executable_path="./chromedriver.exe")# 启动selenium
browser = Chrome(service=service)# 【二】打开页面# 使用创建好的驱动 发送 get 请求打开指定网址
browser.get("https://www.baidu.com")
browser.get("https://www.jd.com/")
time.sleep(3)# 【1】先让浏览器回退到百度页面
browser.back()
time.sleep(3)# 【2】让浏览器从百度回退到京东页面
browser.forward()
import time
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
service = Service(
executable_path="./chromedriver.exe")
browser = Chrome(service=service)
browser.get("https://www.jd.com/")# 滑动到页面底部
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
time.sleep(3)
【三】点击元素
import time
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
service = Service(
executable_path="./chromedriver.exe")
browser = Chrome(service=service)
browser.get("https://www.jd.com/")# 点击页面元素# 先找到当前的 点击对象
search_btn = browser.find_element(By.XPATH,'//*[@id="search"]/div/div[2]/button')# 方式一
search_btn.click()
time.sleep(3)# 方式二:使用js代码
browser.execute_script('arguments[0].click();', search_btn)
time.sleep(3)
import time
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
service = Service(
executable_path="./chromedriver.exe")
browser = Chrome(service=service)
browser.get("https://www.jd.com/")# 向输入框输入文本
search_input = browser.find_element(By.XPATH,'//*[@id="key"]')
search_input.send_keys()
browser.execute_script('arguments[0].value="手机";', search_input)
time.sleep(2)
search_btn.click()
time.sleep(3)
import time
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
service = Service(
executable_path="./chromedriver.exe")
browser = Chrome(service=service)
browser.get("https://www.jd.com/")# 使用JavaScript获取元素的属性值
element = browser.find_element(By.ID,'element_id')
attribute_value = browser.execute_script('return arguments[0].getAttribute("attribute_name");', element)print(attribute_value)
time.sleep(3)
通过execute_script方法执行JavaScript脚本来获取目标元素的属性值。
这里使用getAttribute方法传递属性名参数来返回对应的属性值。
【七】案例
import time
# 【一】滑动到页面底部from selenium.webdriver import Chrome
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
service = Service(
executable_path="./chromedriver.exe")
browser = Chrome(service=service)
browser.get("https://www.jd.com/")# 【1】滑动到页面底部# browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')# 【2】点击页面元素# 先找到当前的 点击对象
search_btn = browser.find_element(By.XPATH,'//*[@id="search"]/div/div[2]/button')# 方式一# search_btn.click()# 方式二:使用js代码# browser.execute_script('arguments[0].click();', search_btn)# 【3】向输入框输入文本# search_input = browser.find_element(By.XPATH, '//*[@id="key"]')# search_input.send_keys()# browser.execute_script('arguments[0].value="手机";', search_input)# time.sleep(2)# search_btn.click()# 【4】控制当前拖动标签"""
# 使用JavaScript拖动一个可拖动的元素到目标位置
source_element = browser.find_element(By.ID,'source_element_id')
target_element = browser.find_element(By.ID,'target_element_id')
browser.execute_script('''
var source = arguments[0], target = arguments[1];
var offsetX = target.getBoundingClientRect().left - source.getBoundingClientRect().left;
var offsetY = target.getBoundingClientRect().top - source.getBoundingClientRect().top;
var event = new MouseEvent('mousedown', { bubbles: true, cancelable: true, view: window });
source.dispatchEvent(event);
event = new MouseEvent('mousemove', { bubbles: true, cancelable: true, view: window, clientX: offsetX, clientY: offsetY });
source.dispatchEvent(event);
event = new MouseEvent('mouseup', { bubbles: true, cancelable: true, view: window });
source.dispatchEvent(event);
''', source_element, target_element)
"""# 【5】获取标签的属性值'''
# 使用JavaScript获取元素的属性值
element = browser.find_element(By.ID,'element_id')
attribute_value = browser.execute_script('return arguments[0].getAttribute("attribute_name");', element)
print(attribute_value)
'''
time.sleep(2)
Ⅵ Selenium框架之页面等待
【一】为什么需要等待
如果网站采用了动态html技术,那么页面上的部分元素出现时间便不能确定,
这个时候就可以设置一个等待时间,强制等待指定时间
等待结束之后进行元素定位,如果还是无法定位到则报错
【二】页面等待的三种方法
【1】强制等待
也叫线程等待, 通过线程休眠的方式完成的等待
如等待5秒: Thread sleep(5000)
一般情况下不太使用强制等待,主要应用的场景在于不同系统交互的地方。
import time
time.sleep(n)# 阻塞等待设定的秒数之后再继续往下执行
【2】显式等待
也称为智能等待,针对指定元素定位指定等待时间
在指定时间范围内进行元素查找,找到元素则直接返回
如果在超时还没有找到元素,则抛出异常
显示等待是 selenium 当中比较灵活的一种等待方式,他的实现原理其实是通过 while 循环不停的尝试需要进行的操作。
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 设置WebDriver等待时间为最多10秒,每隔0.5秒检查一次#每隔 0.5s 检查一次(默认就是 0.5s)# 最多等待 10 秒,否则报错。#如果定位到元素则直接结束等待#如果在10秒结束之后仍未定位到元素则报错
wait = WebDriverWait(chrome,10,0.5)# 等待页面中的元素"J_goodsList"出现
wait.until(EC.presence_of_element_located((By.ID,'J_goodsList'))
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
chrome = webdriver.Chrome()# 携带 cookie 访问京东
cookies =""
cookie_dict ={cookie.split("=",1)[0].strip(): cookie.split("=",1)[1].strip()for cookie in[cookie for cookie in cookies.split(";")]}
chrome.get('https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA')for name, value in cookie_dict.items():
chrome.add_cookie({'name': name,'value': value})
chrome.get('https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA')# 设置WebDriver等待时间为最多10秒,每隔0.5秒检查一次# 每隔 0.5s 检查一次(默认就是 0.5s)# 最多等待 10 秒,否则报错。# 如果定位到元素则直接结束等待# 如果在10秒结束之后仍未定位到元素则报错
wait = WebDriverWait(chrome,10,0.5)# 等待页面中的元素"J_goodsList"出现
wait.until(EC.presence_of_element_located((By.ID,'J_goodsList')))
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.service import Service
service = Service(executable_path="./chromedriver.exe")
browser = Chrome(service=service)# browser.add_cookie()# browser.delete_cookie(name)# browser.delete_all_cookies()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY