这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战python
在selenium当中除了简单的点击动做外,还有一些稍微复杂的动做,就须要用到ActionChains(动做链)这个子模块来知足咱们的需求。web
ActionChains能够完成复杂一点的页面交互行为,例如元素的拖拽,鼠标移动,悬停行为,内容菜单交互。 它的执行原理就是当调用ActionChains方法的时候不会当即执行,而是将全部的操做暂时储存在一个队列中,当调用perform()方法的时候,会按照队列中放入的前后顺序执行前面的操做。chrome
导入ActionChains包:windows
from selenium.webdriver.common.action_chains import ActionChains浏览器
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() | 执行链中的全部动做 |
示例:markdown
经过定位获取的标签对象的 text 属性,获取文本内容。app
经过定位获取的标签对象的 get_attribute()函数,传入属性名,来获取属性的值。函数
对于某些操做: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)
复制代码
用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
窗口切换:
首先要获取全部标签页的窗口句柄;
而后利用窗口句柄切换到句柄指向的标签页。
窗口句柄:指的是指向标签页对象的标识!
解析:
#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()
复制代码
从如今作起,坚持下去,一天进步一小点,不久的未来,你会感谢曾经努力的你! |
本博主会持续更新爬虫基础分栏及爬虫实战分栏,认真仔细看完本文的小伙伴们,能够点赞收藏并评论出大家的读后感。并可关注本博主,在从此的日子里阅读更多爬虫文!
若有错误或者言语不恰当的地方可在评论区指出,谢谢!
如转载此文请联系我征得本人赞成,并标注出处及本博主名,谢谢 !