# selenium_study **Repository Path**: shan_apple/selenium_study ## Basic Information - **Project Name**: selenium_study - **Description**: 个人学习selenium的一些代码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-07-03 - **Last Updated**: 2023-07-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 安装 直接在ubuntu下载google,无需其他配置 https://www.google.cn/chrome/index.html ## 基础操作 浏览、获取元素、点击、隐藏浏览器、不加载图片 ## 进阶操作 一、多标签之间的切换 场景:有的时候点击一个链接,新页面并非由当前页面跳转过去,而是新开一个页面打开,这种情况下,计算机需要识别多标签或窗口的情况。 1.获取所有窗口的句柄 handles = driver. window_handles 1 调用该方法会得到一个列表,在selenium运行过程中的每一个窗口都有一个对应的值存放在里面。 2.通过窗口的句柄进入的窗口 driver.switch_to_window(handles[n]) driver.switch_to.window(handles[n]) (推荐使用) 通过窗口句柄激活进入某一窗口 二、多表单切换 在网页中,表单嵌套是很常见的情况,尤其是在登录的场景 1.什么是多表单? 实际上就是使用iframe/frame,引用了其他页面的链接,真正的页面数据并没有出现在当前源码中,但是在浏览器中我们看到,简单理解可以使页面中开了一个窗口显示另一个页面 2.处理方法 直接使用id值切换进表单 driver.switch_to.frame(value)/driver.switch_to_frame(value) 1 定位到表单元素,再切换进入 el = driver.find_element_by_xxx(value) driver.switch_to.frame(el) /driver.switch_to_frame(el) 1 2 举例:qq空间进入账号密码登录 三、弹出框操作 1) 进入到弹出框中 driver.switch_to.alert 2) 接收警告 accept() 3) 解散警告 dismiss() 4) 发送文本到警告框 send_keys(data) 四、鼠标和键盘操作 1.鼠标操作 导入动作链类,动作链可以储存鼠标的动作 from selenium.webdriver import ActionChains 1 获取元素 el = driver.find_element_by_xxx(value) 1 对el执行右击 context_click(el) 1 执行ActionChains中储存的所有动作 perform() 例如: ActionChains(driver).context_click(ele).perform() 点击鼠标右键 ActionChains(driver). double_click(ele).perform() 点击鼠标左键 ActionChains(driver).move_to_element(el).perform() 鼠标悬停 2.键盘操作 键盘操作使用的是Keys类,一般配合send_keys使用 导入包 from selenium.webdriver.common.keys import Keys 1 常见的键盘操作 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,‘x’) 剪切(Ctrl+X) send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V) send_keys(Keys.F1) 键盘 F1 …… send_keys(Keys.F12) 键盘 F12 五、浏览器等待 1.为什么要进行等待? 1.网速慢 2.网站内容过多 3.如果不进行等待而直接定位元素,可能会抛出异常 1 2 3 4 5 2.selenium中等待的分类: 强制等待 显示等待 隐式等待 1 2 3 4 5 1.强制等待 # 导入定时等待库 from time import sleep 或者 import time #表示强行等待10s在执行下一句代码 这种等待方式时间到了就会执行下个语句,但比 较死板,不能保证在等待的时间内元素真正被加载了出来。而且如果等待的元素已经被 加载出来,还需要等待到时间才会执行下一句,浪费时间。 time.sleep(10) 1 2 3 4 5 6 7 2.隐式等待 driver.implicitly_wait(30) #等待30s 这个等待表示在规定的时间内页面的所有元素都加载完了就执行下一步,否则一直等到 时间截止,然后再继续下一步。这个方法的缺点是你需要的元素已经加载出来了,但 页面还没有加载完,再需要继续等待页面加载完才能执行下一步操作。 1 2 3 4 5 注:隐式等待的作用域是全局,所以一般设置在整局代码的头几行。 隐式等待采用全部设置,也就是说,你所有的findElement方法都会最多等待30s 3.显式等待 需要导入的包 from selenium.webdriver.support.wait import WebDriverWait #导入显性等待的包 from selenium.webdriver.support import expected_conditions as EC #判断所需要的元素是否已经被加载出来 from selenium.webdriver.common.by import By #定位 1 2 3 4 WebDriverWait类是由WebDirver 提供的等待方法。显示等待明确的要等到某个元素的出现,在设置时间内每隔x秒去判断一下指定的元素是否加载完,加载完了就执行下一步,否则继续每隔x秒去判断,指定时间截止。如果超时就会抛出异常。 例如: WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.CLASS_NAME,"g-hu"))) 1 三者区别: 强制等待:傻瓜式等待,不智能 隐式等待:全局通用,只需设置一次,很智能(等到了就走,不会浪费时间) 显式等待:等待元素处于特定条件的时候使用,很智能(等到了就走,不会浪费时间) 1 2 3 掌握 selenium控制标签页的切换 掌握 selenium控制iframe的切换 掌握 利用selenium获取cookie的方法 掌握 手动实现页面等待 掌握 selenium控制浏览器执行js代码的方法 掌握 selenium开启无界面模式 了解 selenium使用代理ip 了解 selenium替换user-agent ———————————————— 版权声明:本文为CSDN博主「北山啦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_45176548/article/details/111404736