【❤️爬虫必备->Selenium从黑铁到王者❤️】下篇——万字博文详解(建议收藏)

这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战python

🐻4.动做链:

👑(1)讲解:

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

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

  • 导入ActionChains包:windows

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)示例:

示例:markdown

  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 属性,获取文本内容。app

♥️(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切换的方法!oop

方法 做用
js = 'window.open("www.baidu.com");'chrome.execute_script(js) 打开新标签
window_handles 获取全部页面窗口的句柄
current_window_handle 获取当前页面窗口的句柄
switch_to.window(window_name) 定位页面转到指定的window_name页面

注意:Window_handles的顺序并非浏览器上标签的顺序,尽可能避免多标签操做!post

💊(2)实战演示:

🔆①思路解析:

窗口切换:
首先要获取全部标签页的窗口句柄;
而后利用窗口句柄切换到句柄指向的标签页。
窗口句柄:指的是指向标签页对象的标识!
解析:
#1.获取当前全部的标签页的句柄构成的列表
current_windows = driver.window_handles

#2.根据标签页句柄列表索引下标进行切换
driver.switch_to.window(windows[0])

🔆②上代码:

import time
from selenium import webdriver

driver=webdriver.Chrome()

driver.get('https://www.baidu.com/')

time.sleep(1)
driver.find_element_by_id('kw').send_keys('python')
time.sleep(1)
driver.find_element_by_id('su').click()
time.sleep(1)

# 经过执行js来新开一个标签页
js = "window.open('https://www.sougou.com');"
driver.execute_script(js)
time.sleep(1)

# 1.获取当前全部的窗口
windows = driver.window_handles

time.sleep(2)
# 2.根据窗口索引进行切换
driver.switch_to.window(windows[0])
time.sleep(2)
driver.switch_to.window(windows[1])

time.sleep(6)
driver.quit()
复制代码

🔮In The End!

请添加图片描述

从如今作起,坚持下去,一天进步一小点,不久的未来,你会感谢曾经努力的你!

本博主会持续更新爬虫基础分栏及爬虫实战分栏,认真仔细看完本文的小伙伴们,能够点赞收藏并评论出大家的读后感。并可关注本博主,在从此的日子里阅读更多爬虫文!

若有错误或者言语不恰当的地方可在评论区指出,谢谢!

如转载此文请联系我征得本人赞成,并标注出处及本博主名,谢谢 !

相关文章
相关标签/搜索