Python如何写Selenium全攻略

Python如何写Selenium全攻略

目录

1、环境准备

2、浏览器驱动自动下载的地址

3、简单代码演示

4、如果自动下载浏览器驱动缓慢可以更改下载地址

Firefox 浏览器(GeckoDriver)

5、如何在cmd运行Selenium程序

6、选择器基础操作

2.1 id选择器

2.1.1 find_element() 和 find_elements()的区别

2.2 class name选择器

2.3 tag name 选择器

2.4 name 选择器

2.5 css Selector 选择器

2.6 Xpath 选择器

7、WebElement对象的find_element或者find_elements

8、延时

8.1 强制延时

8.2 隐式等待

8.3 显示等待

9、常用的操作

9.1点击click()

9.2 输入文本send_keys()

9.3 获取文本内容text

9.4 获取元素等信息get_attribute()

9.5 获取title名 .title

9.6 获取页面id current_window_handle

9.7 获取所有页面id

9.8 窗口大小

9.9 屏幕截图

9.10 上传文件

9.11 手机模式

10、frame切换

11、窗口页面切换

12、复选框checkbox

13、下拉框 select

13.1 Select 单选框

13.2 Select的一系列方法

13.3 Select 复选框

14、ActionChains模拟鼠标操作

14.1 操作试例

14.2 ActionChains 类的常用方法及作用列表

15、冻结页面

16、弹出对话框

16.1 alert对话框

16.2 confirm对话框

16.3 prompt对话框


前言:

这是博主在学习记录笔记中拷贝的Python写Selenium部分,所以比较适合大家复习,由于比较简单没有特别详细的介绍

1、环境准备

在控制台输入

下载Chrom浏览器驱动

chromedriver.storage.googleapis.com/index.html

2、浏览器驱动自动下载的地址

博主的是:C:\Users\用户名\.cache\selenium

3、简单代码演示

from selenium import webdriver wd = webdriver.Edge() # 自动下载浏览器驱动 wd.get("https://www.baidu.com/index.php?tn=75144485_1_dg&ch=9") input("敲回车退出")

4、如果自动下载浏览器驱动缓慢可以更改下载地址

但是这个只对当时的cmd窗口有效,我们可以手动在代码中设置镜像路径:

import os # 注意要在导包之前, 【手动控制镜像】 os.environ['SE_DRIVER_MIRROR_URL'] = \ 'https://cdn.npmmirror.com/binaries/chrome-for-testing' from selenium import webdriver wd = webdriver.Chrome() # 自动下载浏览器驱动 wd.get("https://www.baidu.com/index.php?tn=75144485_1_dg&ch=9") input("敲回车退出")

如果仍然有问题考虑手动下载驱动

💡

Chrome 浏览器(ChromeDriver)

官方下载地址 http://chromedriver.storage.googleapis.com/index.html

版本匹配:需与 Chrome 浏览器版本对应,可通过浏览器地址栏输入 chrome://version/ 查看版本号。

注意事项

• 若下载新版无对应驱动,推荐访问 Chrome for Testing 镜像站:https://googlechromelabs.github.io/chrome-for-testing/

Microsoft Edge 浏览器(EdgeDriver)

官方下载地址 https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

• 严格版本匹配:驱动版本需与 Edge 浏览器版本完全一致(通过 edge://settings/help 查看版本)。Firefox 浏览器(GeckoDriver)

官方下载地址https://github.com/mozilla/geckodriver/releases

• 选择与 Firefox 版本兼容的驱动(通常最新版即可)。

下载好的驱动放到Path里面,这样之前的代码就不需要改动了,wd = webdriver.Chrome() # 自动下载浏览器驱动,会去Path目录下找是否有相应的驱动

查找Path路径:

手动配置路径:

# 自动下载浏览器驱动 from selenium import webdriver from selenium.webdriver.chrome.service import Service # 新加的 wd = webdriver.Chrome(service=Service(r"C:\Users\Li\.cache\selenium\chromedriver\win64\141.0.7390.122/chromedriver.exe")) wd.get("https://www.baidu.com/index.php?tn=75144485_1_dg&ch=9") input("敲回车退出")

5、如何在cmd运行Selenium程序

如果是第一次运行Selenium程序需要下载:

在cmd中输入

pip install selenium

验证是否安装成功

pip list | findstr selenium

在.py文件夹下,运行 文件名.py

但是有可能cmd中运行的程序有一些浏览器驱动的日志,会妨碍我们观察自己的日志,我们可以把这部分代码过滤掉

#加上参数,禁止chromedriver 日志写屏 options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging'])

6、选择器基础操作

使用By需要导入包:

from selenium.webdriver.common.by import By

2.1 id选择器

通过id选择,唯一、简洁、稳定性高,最推荐使用

#找到输入框 element = driver.find_element(By.ID, "kw")
#导包 from selenium import webdriver from selenium.webdriver.common.by import By #加上参数,禁止chromedriver 日志写屏 options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) # 下载驱动 driver = webdriver.Chrome() print("成功进入") #访问网页 driver.get("https://www.byhy.net/cdn2/files/selenium/stock1.html") #找到输入框 element = driver.find_element(By.ID, "kw") #输入\n 会自动回车 element.send_keys("四川\n") input("回车退出程序") #关闭浏览器 driver.quit()
2.1.1 find_element() 和 find_elements()的区别

2.2 class name选择器

用与class类型的定位,class在HTML中不是唯一的,不建议使用

# CLASS_NAME 选择器 elements = driver.find_elements(By.CLASS_NAME, "name")
#导包 from selenium import webdriver from selenium.webdriver.common.by import By #加上参数,禁止chromedriver 日志写屏 options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) # 下载驱动 driver = webdriver.Chrome() print("成功进入") #访问网页 driver.get("https://www.byhy.net/cdn2/files/selenium/stock1.html") # CLASS_NAME 选择器 elements = driver.find_elements(By.CLASS_NAME, "name") for e in elements: print(e.text) input("回车退出程序") #关闭浏览器 driver.quit()

结果:

当元素有多个class类型:

2.3 tag name 选择器

用标签定位,例如:<span> <dev>等,需要保证只使用了一个,不建议使用

# TAG_NAME 选择器 elements = driver.find_elements(By.TAG_NAME, "button")
#导包 from selenium import webdriver from selenium.webdriver.common.by import By #加上参数,禁止chromedriver 日志写屏 options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) # 下载驱动 driver = webdriver.Chrome() print("成功进入") #访问网页 driver.get("https://www.byhy.net/cdn2/files/selenium/stock1.html") # TAG_NAME 选择器 elements = driver.find_elements(By.TAG_NAME, "button") for e in elements: print(e.text) input("回车退出程序") #关闭浏览器 driver.quit()

结果:

2.4 name 选择器

由于在HTML中name可以重复名,所以我们使用的使用一定要确保name是唯一的!

driver.get("https://dict.youdao.com/result?word=attribute&lang=en") element = driver.find_element(By.NAME, "keywords").get_attribute("content") print(element)
import time #导包 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 options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) #下载驱动 driver = webdriver.Chrome() # 隐式等待 driver.implicitly_wait(10) driver.get("https://dict.youdao.com/result?word=attribute&lang=en") element = driver.find_element(By.NAME, "keywords").get_attribute("content") print(element) input("回车退出")

结果:

2.5 css Selector 选择器

这个选择器是有一些语法的,但是一般通过浏览器复制就可以了,所有我懒不想写了:

在控制台中选中元素,然后右击选择“复制selector”就行了

from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time driver = webdriver.Chrome() driver.implicitly_wait(5) driver.get("https://www.baidu.com/") es = driver.find_elements(By.CSS_SELECTOR, "#s-hotsearch-wrapper") for e in es: print(e.text) input("回车退出")

2.6 Xpath 选择器

这个选择器是有一些语法的,但是一般通过浏览器复制就可以了,所有我懒不想写了:

在控制台中选中元素,然后右击选择“复制Xpath”就行了

from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time driver = webdriver.Chrome() driver.implicitly_wait(5) driver.get("https://www.baidu.com/") es = driver.find_elements(By.XPATH, '//*[@id="s-hotsearch-wrapper"]') for e in es: print(e.text) input("回车退出")

7、WebElement对象的find_element或者find_elements

💡

webdriver.find_element() 返回的对象 element 也可以使用find_element()/ find_elements(),

只是element 的区域是你选择的标签内部的区域 例如:

<script>

<div></div>

<div></div>

<div></div>

<span></span>

</script>

这里面的元素标签就是element 涵盖的区域,而 webdriver 读取到的是全局的

element = driver.find_element(By.CLASS_NAME, "search-result") # 在 search-result 下的所有元素 都可以通过 find_elements 或者 find_element 访问 es = element.find_elements(By.TAG_NAME, "div")
#导包 from selenium import webdriver from selenium.webdriver.common.by import By #加上参数,禁止chromedriver 日志写屏 options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) # 下载驱动 driver = webdriver.Chrome() print("成功进入") #访问网页 driver.get("https://www.byhy.net/cdn2/files/selenium/stock1.html") element = driver.find_element(By.CLASS_NAME, "search-result") # 在 search-result 下的所有元素 都可以通过 find_elements 或者 find_element 访问 es = element.find_elements(By.TAG_NAME, "div") for e in es: print(e.text) input("回车退出程序") #关闭浏览器 driver.quit() 

如果要读取全局的文本:

elements = driver.find_elements(By.TAG_NAME, "html") for e in elements: print(e.text)

8、延时

8.1 强制延时

import time time.sleep(3) 

8.2 隐式等待

在驱动下载后就可以加上,功能是在每一次find_element 或者 find_elements 的时候,每隔 半秒 查找一次元素。直到超出你设定的时间,单位:秒

# 下载驱动 driver = webdriver.Chrome() #隐式等待 做用于全局 driver.implicitly_wait(10)

8.3 显示等待

只作用与一个元素,定制化高

关键代码:

from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 显示等待 text = WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.ID, "1")) #有两层() ) # 输出文本 print(text.text) 
#导包 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 #加上参数,禁止chromedriver 日志写屏 options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) # 下载驱动 driver = webdriver.Chrome() #隐式等待 做用于全局 driver.implicitly_wait(10) print("成功进入") #访问网页 driver.get("https://www.byhy.net/cdn2/files/selenium/stock1.html") driver.find_element(By.ID, "kw").send_keys("四川\n") # 显示等待 text = WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.ID, "1")) #有两层() ) # 输出文本 print(text.text) input("回车退出程序") #关闭浏览器 driver.quit()

9、常用的操作

9.1点击click()

driver.find_element(By.ID, "go").click()

9.2 输入文本send_keys()

driver.find_element(By.ID, "kw").send_keys("四川")

9.3 获取文本内容text

element = driver.find_element(By.ID, "1") print(element.text)

9.4 获取元素等信息get_attribute()

💡

在get_attribute()方法中输入不同的字符串有四种效果:输入标签属性名,可以获取到该属性的值输入outerHTML,可以获取选中区域的所有HTML内容输入innerHTML,可以获取选中元素内部的HTML内容输入value,可以获取到输入框中,自己输入的内容

text = driver.find_element(By.ID, "kw").get_attribute("placeholder") print(text)

结果:

💡

这是获取HTML中元素的值

也可以用来获取整个选中的HTML:

在get_attribute方法输入outerHTML

driver.get("https://www.byhy.net/cdn2/files/selenium/stock1.html") element = driver.find_element(By.ID, "1").get_attribute("outerHTML") print(element)

💡

那如果换成输入innerHTML,就只会答应选中标签内部的信息

element = driver.find_element(By.ID, "1").get_attribute("innerHTML") print(element)

结果:

💡

如果是value,那就是我们(用户)输入的数据,进行返回

结果:





并且我们之前学习的.text 是无法获取输入框中咱们自己输入的数据的

9.5 获取title名 .title

print("title :" + driver.title)

9.6 获取页面id current_window_handle

driver.current_window_handle

9.7 获取所有页面id

driver.window_handles

9.8 窗口大小

# 获取窗口大小 print(driver.get_window_size()) # 改变窗口大小 driver.set_window_size(200 ,200)

9.8 获取URL地址

print(driver.current_url)

9.9 屏幕截图

driver.get_screenshot_as_file("E:\Code\python-learn\\test.png")

9.10 上传文件

# 先定位到上传文件的 input 元素 ele = wd.find_element(By.CSS_SELECTOR, 'input[type=file]') # 再调用 WebElement 对象的 send_keys 方法 ele.send_keys(r'h:\g02.png')

9.11 手机模式

from selenium import webdriver # 配置手机模拟参数:指定要模拟的移动设备名称(此处为iPhone 14 Pro Max) # deviceName参数支持多种常见设备,如"Pixel 7"、"iPhone 13"、"iPad Pro"等 mobile_emulation = { "deviceName": "iPhone 14 Pro Max" } # 初始化Chrome浏览器配置对象 chrome_options = webdriver.ChromeOptions() # 将手机模拟配置添加到浏览器选项中 # 这一步是核心:通过experimental_option启用移动设备模拟模式 chrome_options.add_experimental_option("mobileEmulation", mobile_emulation) # 以配置好的手机模式启动Chrome浏览器 driver = webdriver.Chrome(options=chrome_options) # 访问目标网页(此时网页会自动适配手机版布局) driver.get('http://www.baidu.com') # 暂停程序,方便查看手机版网页效果(按回车继续) input() # 关闭浏览器 driver.quit()

10、frame切换

由于有时候HTML内部嵌入了一个HTML,那么WebDriver的范围就涵盖不到内嵌HTML中的元素:

那么直接进行元素定位是定位不到的:

那么就需要这样一段代码切换到内存html中:

#driver.switch_to.frame('内存html标签的主要标志') driver.switch_to.frame('frame1')

主要标志:例如:id和name,我也检查了name的名字是唯一的,所以可以使用

完整代码:

import time #导包 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 options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) #下载驱动 driver = webdriver.Chrome() # 隐式等待 driver.implicitly_wait(10) driver.get("https://www.byhy.net/cdn2/files/selenium/sample2.html") # 切换到内存HTML driver.switch_to.frame('frame1') driver.find_element(By.ID, "searchtext").send_keys("test") input("回车退出")

结果:

那么如果要切换回外层的HTML就使用:

driver.find_element(By.ID, "outerbutton").click()

完整代码:

import time #导包 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 options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) #下载驱动 driver = webdriver.Chrome() # 隐式等待 driver.implicitly_wait(10) driver.get("https://www.byhy.net/cdn2/files/selenium/sample2.html") # 切换到内存HTML driver.switch_to.frame('frame1') driver.find_element(By.ID, "searchtext").send_keys("test") # 切换为外层HTML driver.switch_to.default_content() driver.find_element(By.ID, "outerbutton").click() input("回车退出")

11、窗口页面切换

当打开新的窗口,需要切换页面才可以对新页面进行操作。

当需要关闭新页面回到旧页面,也需要切换回原来的窗口,才可以继续操作

核心代码:

# 获取当前页面id mainWindow = driver.current_window_handle # 获取打开页面的id targetWindow = None for e in driver.window_handles: if e != mainWindow: targetWindow = e # 关闭窗口 driver.close() #切换窗口 driver.switch_to.window(mainWindow)

所有代码:

import time #导包 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 options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) #下载驱动 driver = webdriver.Chrome() # 隐式等待 driver.implicitly_wait(10) driver.get("https://www.byhy.net/cdn2/files/selenium/sample3.html") print("title :" + driver.title) # 获取当前页面id mainWindow = driver.current_window_handle print("当前窗口id" + mainWindow) driver.find_element(By.CSS_SELECTOR, "body > a").click() # 获取打开页面的id targetWindow = None for e in driver.window_handles: if e != mainWindow: targetWindow = e # 切换窗口 driver.switch_to.window(targetWindow) print("当前窗口id" + driver.current_window_handle) time.sleep(2) # 关闭窗口 driver.close() #切换窗口 driver.switch_to.window(mainWindow) driver.find_element(By.CSS_SELECTOR, "#outerbutton").click() input("回车退出") 

12、复选框checkbox

由于复选框可以有多个选项,那么我们如何来确定哪些被选了呢?

可以通过具体的一个特征例如name都为teachers1,然后:checked。配合find_elements可以了

radio框(单选框)和这个原理一样,我就不多说了

核心代码:

# 获取所有以选中的选项 eles = driver.find_elements(By.CSS_SELECTOR, "[name=teachers1]:checked")
import time #导包 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 options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) #下载驱动 driver = webdriver.Chrome() # 隐式等待 driver.implicitly_wait(10) driver.get("https://www.byhy.net/cdn2/files/selenium/test2.html") # chekbox选项框 driver.find_element(By.CSS_SELECTOR, "#s_checkbox > input[type=checkbox]:nth-child(3)").click() eles = driver.find_elements(By.CSS_SELECTOR, "[name=teachers1]:checked") for e in eles: print(e.get_attribute("value"))

结果:

13、下拉框 select

13.1 Select 单选框

获取选项框中被选中的选项。

需要导入一个新的对象Select

核心代码:

from selenium.webdriver.support.select import Select # 获取当前选中的选项 select = Select(driver.find_element(By.ID, "ss_single")) for se in select.all_selected_options: print(se.text) input("回车退出")
💡

select.all_selected_options解释:

返回的是所有选项的webelement元素,所以要查看文本得使用 .text

所有代码:

import time #导包 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 # 导入Select类 from selenium.webdriver.support.select import Select options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) #下载驱动 driver = webdriver.Chrome() # 隐式等待 driver.implicitly_wait(10) driver.get("https://www.byhy.net/cdn2/files/selenium/test2.html") # select框(下拉框单选) # # 点击其中一个选项 # driver.find_element(By.CSS_SELECTOR, "#ss_single > option:nth-child(2)").click() # 获取当前选中的选项 select = Select(driver.find_element(By.ID, "ss_single")) for se in select.all_selected_options: print(se.text) input("回车退出")

13.2 Select的一系列方法

13.3 Select 复选框

核心代码:

# Select 复选框 select = Select(driver.find_element(By.ID, "ss_multi")) # 清除所有的选项 select.deselect_all() # 选择选项 select.select_by_visible_text("小江老师") select.select_by_visible_text("小雷老师") # 查看选择的所有元素 for se in select.all_selected_options: print(se.text) input("回车退出")

全部代码:

import time #导包 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 # 导入Select类 from selenium.webdriver.support.select import Select options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) #下载驱动 driver = webdriver.Chrome() # 隐式等待 driver.implicitly_wait(10) driver.get("https://www.byhy.net/cdn2/files/selenium/test2.html") # Select 复选框 select = Select(driver.find_element(By.ID, "ss_multi")) # 清除所有的选项 select.deselect_all() # 选择选项 select.select_by_visible_text("小江老师") select.select_by_visible_text("小雷老师") # 查看选择的所有元素 for se in select.all_selected_options: print(se.text) input("回车退出")

结果:

14、ActionChains模拟鼠标操作

14.1 操作试例

完成以下两个动作:

核心代码:

# 需要导入包 from selenium.webdriver.common.action_chains import ActionChains ac = ActionChains(driver) # 鼠标选停 ac.move_to_element( driver.find_element(By.ID, "navbarDropdown") ).perform() time.sleep(3) for i in range(1,6): #鼠标拖放 ac.drag_and_drop( # 拖动的元素 driver.find_element(By.ID, "course-" + str(i)), # 放到的位置 driver.find_element(By.ID, "selected-courses") ).perform() time.sleep(1)

全部代码:

import time #导包 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 from selenium.webdriver.common.action_chains import ActionChains options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) #下载驱动 driver = webdriver.Chrome() # 隐式等待 driver.implicitly_wait(10) driver.get("https://www.byhy.net/cdn2/files/selenium/sample4.html") ac = ActionChains(driver) # 鼠标选停 ac.move_to_element( driver.find_element(By.ID, "navbarDropdown") ).perform() time.sleep(3) for i in range(1,6): #鼠标拖放 ac.drag_and_drop( # 拖动的元素 driver.find_element(By.ID, "course-" + str(i)), # 放到的位置 driver.find_element(By.ID, "selected-courses") ).perform() time.sleep(1) input("回车退出")

14.2 ActionChains 类的常用方法及作用列表

方法

作用说明

基础点击操作

click(on_element=None)

点击元素(默认点击当前鼠标位置,若指定 on_element 则点击该元素)。

click_and_hold(on_element=None)

按住元素不松开(可用于拖拽、长按等场景)。

release(on_element=None)

释放之前按住的元素(配合 click_and_hold 完成拖拽等动作)。

double_click(on_element=None)

双击元素(如双击文本选中、打开文件等)。

context_click(on_element=None)

右键点击元素(弹出右键菜单)。

鼠标移动操作

move_to_element(to_element)

鼠标悬停到指定元素上(如显示下拉菜单、tooltip 提示)。

move_by_offset(xoffset, yoffset)

从当前鼠标位置沿 x 轴(水平)和 y 轴(垂直)移动指定像素(正数向右 / 下,负数向左 / 上)。

move_to_element_with_offset(to_element, xoffset, yoffset)

以指定元素为基准,偏移 x、y 像素后移动鼠标(如点击元素边缘)。

拖拽操作

drag_and_drop(source, target)

拖拽元素:从 source 元素按住,移动到 target 元素后释放。

drag_and_drop_by_offset(source, xoffset, yoffset)

拖拽元素:从 source 元素按住,沿 x、y 轴移动指定像素后释放。

键盘操作

send_keys(*keys_to_send)

向当前聚焦的元素输入文本或按键(如 Keys.ENTERKeys.TAB)。

send_keys_to_element(element, *keys_to_send)

向指定元素输入文本或按键(无需提前聚焦)。

其他操作

pause(seconds)

暂停指定秒数(用于等待交互完成,单位:秒)。

reset_actions()

清除当前 ActionChains 中所有未执行的动作。

perform()

执行所有已添加到 ActionChains 中的动作(必须调用此方法才会生效)。

💡

注意:

1、ActionChains 的方法需要通过 perform() 触发执行,例如:

2、方法可链式调用,按顺序执行动作,适合模拟连续的用户操作(如拖拽 + 释放、悬停 + 点击等)。

15、冻结页面

有的下拉框只要你鼠标移动开,下拉框就消失了,我们就定位不到。可以使用下面这串代码,输入在控制台中,5秒后页面就会冻结住

setTimeout(function(){debugger}, 5000)

16、弹出对话框

浏览器原生态的对话框不属于HTML元素,是不能通过定位去操作的

16.1 alert对话框

关键代码:

# 切换到弹窗 alert = driver.switch_to.alert # 打印弹窗内容 print(alert.text) # 确认 alert.accept()

全部代码:

from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains 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.implicitly_wait(5) driver.get("https://www.byhy.net/cdn2/files/selenium/test4.html") driver.find_element(By.ID, "b1").click() # 切换到弹窗 alert = driver.switch_to.alert # 打印弹窗内容 print(alert.text) # 确认 alert.accept() input("回车退出")

16.2 confirm对话框

核心代码:

# 切换到对话框 alert = driver.switch_to.alert # 点击取消按键 alert.dismiss() # 点击确认按键 alert.accept()

全部代码:

from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains 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.implicitly_wait(5) driver.get("https://www.byhy.net/cdn2/files/selenium/test4.html") # 弹出对话框 driver.find_element(By.ID, "b2").click() # 切换到对话框 alert = driver.switch_to.alert # 打印对话框内容 print(alert.text) # 点击取消按键 alert.dismiss() # 再次弹出对话框 driver.find_element(By.ID, "b2").click() # 点击确认按键 alert.accept() input("回车退出")

16.3 prompt对话框

核心代码:

# 切换到弹窗 alert = driver.switch_to.alert # 打印弹出的默认内容 print(alert.text) # 输入数据 alert.send_keys("test") # 确定 alert.accept() # 取消 alert.dismiss()

全部代码:

from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time driver = webdriver.Chrome() driver.implicitly_wait(5) driver.get("https://www.byhy.net/cdn2/files/selenium/test4.html") # 点出弹框 driver.find_element(By.ID, "b3").click() # 切换到弹窗 alert = driver.switch_to.alert # 打印弹出的默认内容 print(alert.text) time.sleep(2) # 输入数据 alert.send_keys("test") # 确定 alert.accept() # 重新点出弹窗 driver.find_element(By.ID, "b3").click() time.sleep(2) # 取消 alert.dismiss() input("回车退出")

Read more

2026年最新AI大模型学习路线(超详细,小白/程序员必收藏)从入门到精通!

2026年最新AI大模型学习路线(超详细,小白/程序员必收藏)从入门到精通!

当下AI大模型在人工智能领域的热度持续攀升,已然成为技术圈的核心风口,不仅吸引了大量行业从业者深耕,更有无数编程小白、转行人士想要入门掘金。但很多人面对繁杂的技术资料无从下手,不知道该从哪里开始、按什么顺序学习,踩了不少弯路。 今天就给大家整理了一份2026年最新、最系统的AI大模型学习路线,从0基础入门到精通实战,配套全套学习资源,不管你是纯小白还是有一定基础的程序员,跟着学就能少走弯路、快速上手,建议收藏备用,避免后续找不到! 1、大模型学习路线 2、从0到进阶大模型学习视频教程 从入门到进阶这里都有,跟着老师学习事半功倍。 3、 入门必看大模型学习书籍&文档.pdf(书面上的技术书籍确实太多了,这些是我精选出来的,还有很多不在图里) 4、 AI大模型最新行业报告 2026最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。 5、面试试题/经验 【大厂 AI 岗位面经分享(107 道)】 【AI

By Ne0inhk
医疗编程AI技能树与培训技能树报告(国内外一流大学医疗AI相关专业分析2025版,上)

医疗编程AI技能树与培训技能树报告(国内外一流大学医疗AI相关专业分析2025版,上)

引言:医疗AI编程的时代背景与技能体系框架 全球医疗AI市场正以爆发式速度增长,预计2025年市场规模将达到1100亿美元,年复合增长率(CAGR)高达38%[1]。这一增长背后是AI技术在临床场景的深度渗透:AI辅助肺结节检测敏感度已突破95%,某知名医院利用大型语言模型(LLM)开发的智能诊断系统将误诊率降低15%,瑞金医院通过AI技术使病理诊断效率提升百倍[2][3][4]。当手术机

By Ne0inhk
【保姆级教程】小白也能搞定!手把手教你部署AI小说生成器

【保姆级教程】小白也能搞定!手把手教你部署AI小说生成器

目录 一、 磨刀不误砍柴工:环境准备 二、 第一次安装:给代码安个家 第一步:把项目“搬”回家 第二步:造一个专属“房间” 第三步:安装依赖 第四步:点火启动 三、 关机重启后:如何再次开启? 四、 关键一步:配置“大脑”(API接口) 五、开始你的创作 六、写在最后:为什么推荐用蓝耘做“大脑”? 在这个AI辅助创作爆发的时代,拥有一款属于自己的本地AI写作工具,无疑是许多文字工作者的梦想。最近拿到一份AI小说生成器的部署文档,虽然功能强大,但对于非技术出身的朋友来说,那些代码和命令行多少有些“劝退”。 别担心,今天我们就把这份“天书”翻译成“人话”,手把手带你从零开始,搭建属于你的AI创作助手。无论你是第一次安装,还是关机后不知道怎么重启,这篇教程都能帮你搞定。

By Ne0inhk
【AI辅助编程】【Claude Code】----秒杀 Cursor!Claude Code 保姆级教程,从安装到实战全过程,一篇文章给你透

【AI辅助编程】【Claude Code】----秒杀 Cursor!Claude Code 保姆级教程,从安装到实战全过程,一篇文章给你透

文章目录 * 前言 * 一、基础概念解析, * 1.1、什么是Claude Code? * 1.2、Claude Code能干嘛? * 二、安装 Claude Code * 2.1、(方式一)基于node.js环境 * 2.2、(方式二)不依赖node.js环境,原生版(推荐) * 三、配置 * 3.1配置大模型端点和密钥 * 1.注册账号 (通过上面提供的连接注册) * 2.获取API Key * 3.配置cluade code 环境变量 * 4.测试配置: * 5.切换模型(非必要,可跳过) * 6.查看token用量

By Ne0inhk