万字博文教你爬虫必备->Selenium【详解篇】,Python面试必问

🎍第二部分——Selenium进阶操作!

===================================================================================

🐱1.操作浏览器的常用骚操作:


🚩(1)骚操作及代码实现:

| 浏览器操作 | 代码 |

| — | — |

| 最大化浏览器 | driver.maximize_window() |

| 刷新 | driver.refresh() |

| 后退 | driver.back() |

| 前进 | driver.forward() |

| 设置浏览器大小 | driver.set_window_size(300,300) |

| 设置浏览器位置 | driver.set_window_position(300,200) |

| 关闭浏览器单个窗口,如果只有一个标签页则关闭整个浏览器 | driver.close() |

| 关闭浏览器所有窗口 | driver.quit() |

🚩(2)实战使用:

连续访问三个页面——天猫,淘宝,京东,然后调用back()方法回到第二个页面——淘宝,接下来再调用forward()方法又可以前进到第三个页面——京东!

⚠️①上代码:

import time

from selenium import webdriver

browser = webdriver.Chrome()

browser.get(‘https://www.tmall.com/’)

time.sleep(1)

browser.get(‘https://taobao.com/’)

time.sleep(1)

browser.get(‘https://www.jd.com/’)

time.sleep(1)

browser.back()

time.sleep(1)

browser.forward()

time.sleep(1)

browser.close()

⚠️②实现效果:

selenium操作实战

🐹2.元素选取/查找节点:


第一种方法——find_element(s)by_…方法:

⚓️(1)单个节点:

在一个页面中有很多不同的策略可以定位一个元素。我们可以选择最合适的方法去查找元素。Selenium提供了下列的方法:

| 单个元素查找方法 | 作用 |

| — | — |

| find_element_by_xpath() | 通过Xpath查找 |

| find_element_by_class_name() | 通过class属性查找 |

| find_element_by_id() | 通过id属性查找 |

| find_element_by_name() | 通过name属性进行查找 |

| find_element_by_css_selector() | 通过css选择器查找 语法规则 |

| find_element_by_link_text() | 通过链接文本查找 |

| find_element_by_partial_link_text() | 通过链接文本的部分匹配查找 |

| find_element_by_tag_name() | 通过标签名查找 (只有目标元素在当前html中是唯一标签或者是众多定位出来的标签中的第一个的时候才使用!) |

注意:通过上述不管是哪一种方法,其返回的节点类型都是WebElement类型!

⚓️(2)多个节点:
上面方法的element加上一个s,则是对应的多个元素的查找方法。

如下可知其返回内容是列表类型,列表中每个节点仍然是WebElement类型:

[<selenium.webdriver.remote.webelement.WebElement (session=“73974727c0ec09e0b7d57639c3”, element=“1b33ea80-ba15-91ac-635903f79df2”)>,

<selenium.webdriver.remote.webelement.WebElement (session=“739747be09cb27c0ecd57639c3”, element=“1ac2f257-4364-be00-84de883b265d”)>]

注意:find_element匹配不到就抛出异常,但是find_elements匹配不到返回空列表!

第二种方法——By对象查找:

除了以上的多种查找方式,还有两种私有方法集成了上面的所有的查找方法,让我们更方便的使用!

| 方法 | 作用 |

| — | — |

| find_element(By.XPATH, ‘//button/span’) | 通过Xpath查找一个 |

| find_elements(By.XPATH, ‘//button/span’) | 通过Xpath查找多个 |

其中的第一个参数可以选择使用查找的方法,By.xxx 使用xxx方式解析,解析方法如下(注意——By对象导入: from selenium.webdriver.common.by import By):

  • ID = “id” ​

  • XPATH = “xpath” ​

  • LINK_TEXT = “link text” ​

  • PARTIAL_LINK_TEXT = “partial link text”

  • ​ NAME = “name” ​

  • TAG_NAME = “tag name” ​

  • CLASS_NAME = “class name”

  • ​ CSS_SELECTOR = “css selector”

🐸3.节点交互:


Selenium可以驱动浏览器来执行一些操作,也就是说可以让浏览器模拟执行一些动作。

🚀(1)常见用法:

| 方法 | 作用 |

| — | — |

| send_keys() | 输入文字 |

| clear() | 清空文字 |

| click() | 点击按钮 |

| submit() | 提交表单 |

🚀(2)示例之骚操作:

定位用户名

element=driver.find_element_by_id(“userA”)

输入用户名

element.send_keys(“admin1”)

删除输入的用户名

element.send_keys(Keys.BACK_SPACE)

重新输入用户名

element.send_keys(“admin_new”)

全选

element.send_keys(Keys.CONTROL,‘a’)

复制

element.send_keys(Keys.CONTROL,‘c’)

粘贴

driver.find_element_by_id(‘passwordA’).send_keys(Keys.CONTROL,‘v’)

🐻4.动作链:


👑(1)讲解:

  • 在selenium当中除了简单的点击动作外,还有一些稍微复杂的动作,就需要用到ActionChains(动作链)这个子模块来满足我们的需求。

  • ActionChains可以完成复杂一点的页面交互行为,例如元素的拖拽,鼠标移动,悬停行为,内容菜单交互。 它的执行原理就是当调用ActionChains方法的时候不会立即执行,而是将所有的操作暂时储存在一个队列中,当调用perform()方法的时候,会按照队列中放入的先后顺序执行前面的操作。

  • 导入ActionChains包:

from selenium.webdriver.common.action_chains import ActionChains

👑(2)方法:

| ActionChains提供的方法 | 作用 |

| — | — |

| click(on_element=None) | 鼠标左键单击传入的元素 |

| double_click(on_element=None) | 双击鼠标左键 |

| context_click(on_element=None) | 点击鼠标右键 |

| click_and_hold(on_element=None) | 点击鼠标左键,按住不放 |

| release(on_element=None) | 在某个元素位置松开鼠标左键 |

| drag_and_drop(source, target) | 拖拽到某个元素然后松开 |

| drag_and_drop_by_offset(source, xoffset, yoffset) | 拖拽到某个坐标然后松开 |

| move_to_element(to_element) | 鼠标移动到某个元素 |

| move_by_offset(xoffset, yoffset) | 移动鼠标到指定的x,y位置 |

| move_to_element_with_offset(to_element, xoffset, yoffset) | 将鼠标移动到距某个元素多少距离的位置 |

| perform() | 执行链中的所有动作 |

👑(3)示例:

示例:

  1. 导包:from selenium.webdriver.common.action_chains import ActionChains

  2. 实例化ActionChains对象:Action=ActionChains(driver)

  3. 调用右键方法:element=Action.context_click(username)

  4. 执行:element.perform()

🐮5.提取节点文本内容和属性值:


♥️(1)获取文本内容:

  • element.text

通过定位获取的标签对象的 text 属性,获取文本内容。

♥️(2)获取属性值:

  • element.get_attribute(‘属性名’)

通过定位获取的标签对象的 get_attribute()函数,传入属性名,来获取属性的值。

🐒6.执行JavaScript代码:


  对于某些操作:Selenium是没有提供相关的API的。比如:往下滑动页面,但是Selenium伟大的创造者给了我们另一个更为方便的方法——它可以直接模拟运行JavaScript,使用execute_script()方法即可!

⚽️实战演示:

📌①上代码:

import time

from selenium import webdriver

browser = webdriver.Chrome()

browser.get(‘https://baike.baidu.com/item/%E7%99%BE%E5%BA%A6%E6%96%87%E5%BA%93/4928294?fr=aladdin’)

执行JS代码,滑动网页至最底部!

js = ‘window.scrollTo(0, document.body.scrollHeight)’

browser.execute_script(js)

执行JS代码,弹窗提示文字!

browser.execute_script(‘alert(“到达最底部啦!”)’)

time.sleep(3)

📌②效果展示:

滑动

🐫7.标签页/窗口的切换:


💊(1)方法:

用selenium操作浏览器如果需要再打开新的页面,这个时候会有问题,因为我们用selenium操作的是第一个打开的窗口,所以新打开的页面我们是无法去操作的,所以我们要用到切换窗口——即handle切换的方法!

| 方法 | 作用 |

| — | — |

| js = 'window.open(“https://www.baidu.com”);'chrome.execute_script(js) | 打开新标签 |

| window_handles | 获取所有页面窗口的句柄 |

| current_window_handle | 获取当前页面窗口的句柄 |

| switch_to.window(window_name) | 定位页面转到指定的window_name页面 |

注意:Window_handles的顺序并不是浏览器上标签的顺序,尽量避免多标签操作!

💊(2)实战演示:

🔆①思路解析:

窗口切换:

首先要获取所有标签页的窗口句柄;

然后利用窗口句柄切换到句柄指向的标签页。

窗口句柄:指的是指向标签页对象的标识!

解析:

#1.获取当前所有的标签页的句柄构成的列表

current_windows = driver.window_handles

#2.根据标签页句柄列表索引下标进行切换

driver.switch_to.window(windows[0])

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

最后

🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。

og.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
[外链图片转存中…(img-eUkidJhl-1711818352683)]

最后

🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值