写点什么

通过简书网学习 ActionChains,selenium webdriver 学习第 3 篇

作者:梦想橡皮擦
  • 2022 年 3 月 02 日
  • 本文字数:2922 字

    阅读完需:约 10 分钟

通过简书网学习 ActionChains,selenium webdriver 学习第3篇

本篇博客学习 selenium webdriver 控制窗口句柄,以及模拟鼠标键盘操作等内容。

控制 BOSS 直聘网站窗口句柄

本次先通过 BOSS 直聘网进行测试,打开网站首页的头图。切换句柄,用到的核心函数是 driver.switch_to.window(all_handles[0]),其中 all_handlers 为列表类型,在很多博客中,你会看到被废弃的方法 switch_to_window,需要留意一下。


使用 driver.current_window_handle 可以获取当前窗口句柄。


from selenium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import By
driver = webdriver.Chrome()driver.get("https://www.zhipin.com/?ka=header-home")
locator = (By.CLASS_NAME, 'firstRow')try: WebDriverWait(driver, 10).until(EC.presence_of_element_located(locator))except TimeoutError as e: print(e)
btn = driver.find_elements_by_css_selector('tr.firstRow td:nth-child(1)>a')[0]
btn.click() # 打开一个新选项卡窗口
all_handles = driver.window_handles # 获取所有窗口句柄print(all_handles)driver.switch_to.window(all_handles[0]) # 切换到首页句柄
复制代码


switch_to.window 函数相似功能的还有 switch_to.frame() 方法、switch_to.alert 属性,这里这个 alert 属性非常有趣,可以捕获到网页弹窗,测试代码如下:


from selenium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import Byimport time
driver = webdriver.Chrome()driver.get("https://www.zhipin.com/?ka=header-home")
locator = (By.CLASS_NAME, 'firstRow')try: WebDriverWait(driver, 10).until(EC.presence_of_element_located(locator))except TimeoutError as e: print(e)
btn = driver.find_elements_by_css_selector('tr.firstRow td:nth-child(1)>a')[0]
btn.click() # 打开一个新选项卡窗口
all_handles = driver.window_handles # 获取所有窗口句柄
driver.switch_to.window(all_handles[0]) # 切换到首页句柄time.sleep(2)js = "alert('提示弹窗')" # js 代码driver.execute_script(js) # 执行JSalt = driver.switch_to.alert # 捕获网页弹窗print(alt.text) # 打印弹窗文本
复制代码


最终输出弹窗文本,【提示弹窗】。


switch_to.frame() 配合使用的还有两个方法需要学习,分别是跳转父级窗口 driver.switch_to.parent_frame(),跳转回默认页 driver.switch_to.default_content()

通过简书网学习 ActionChains

ActionChains 称为动作链,主要用于模拟鼠标操作,例如单击、双击、右键、拖拽,也可以操作键盘,例如按键按下与松开。使用前需要导入相关类:


from selenium.webdriver.common.action_chains import ActionChains # 导入模块
复制代码


需要注意当我们调用 ActionChains 的方法之后,它不会立即执行,他会把所有操作都放在一个队列中,当我们调用 perform() 方法之后,队列依次执行。


下面实现第一个功能,打开简书,点击导航栏中的 IT 技术选项卡。


from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChains # 导入模块

driver = webdriver.Chrome()driver.maximize_window()driver.get("https://www.jianshu.com/") # 打开简书
it = driver.find_element_by_link_text("IT技术") # 找到所在标签ActionChains(driver).click(it).perform() # 点击所在标签
复制代码


接下来用 ActionChains 实现简书首页的阅读更多操作,下述代码有个位置需要移动两次鼠标,为了让阅读更多首次加载,可以使用运行 JS 代码实现。


from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChains # 导入模块

driver = webdriver.Chrome()driver.maximize_window()driver.get("https://www.jianshu.com/") # 打开简书
# 下述代码用于找到阅读更多change = driver.find_element_by_link_text("涂檬-原创插画社区")ActionChains(driver).move_to_element(change).move_to_element(change).perform()
more = driver.find_element_by_link_text("阅读更多")ActionChains(driver).move_to_element(more).click(more).perform() # 点击阅读更多
复制代码


ActionChains 更多方法如下所示:关于鼠标


  • click(on_element=None):普通单击;

  • click_and_hold(on_element=None):按住左键不松开;

  • context_click(on_element=None):右击;

  • double_click(on_element=None):双击;

  • drag_and_drop(source, target):拖动某个元素到目标元素;

  • drag_and_drop_by_offset(source, xoffset, yoffset):拖拽某个元素到某个坐标;

  • move_by_offset(xoffset, yoffset) :移动鼠标到某个位置;

  • move_to_element(to_element):移动鼠标到某个元素;

  • move_to_element_with_offset(to_element, xoffset, yoffset):移动鼠标到 距某个元素(左上角坐标)指定的位置;

  • release(on_element=None):释放鼠标左键。关于键盘

  • send_keys(*keys_to_send):发送内容到当前焦点的元素;

  • send_keys_to_element(element, *keys_to_send):发送内容到指定元素;

  • key_down(value, element=None): 按下某个键盘上的键;

  • key_up(value, element=None) :松开某个键。


下面实现打开简书,向搜索框输入数据,然后点击查询的动作链操作。


from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChains  # 导入模块
driver = webdriver.Chrome()driver.maximize_window()driver.get("https://www.jianshu.com/") # 打开简书
search_box = driver.find_element_by_id("q") # 搜索框# print(search_box)search_btn = driver.find_element_by_class_name('search-btn') # 搜索按钮
ActionChains(driver).send_keys_to_element(search_box, "梦想橡皮擦").move_to_element(search_btn).click(search_btn).perform()
复制代码


学习了 key_downkey_up 方法之后,可以配合 Keys 类,实现对简书的如下控制,通过下拉滚动条实现【阅读更多】操作。


from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChains  # 导入模块from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()driver.maximize_window()driver.get("https://www.jianshu.com/") # 打开简书# 模拟按下键盘上下键 500 次for i in range(500): ActionChains(driver).key_down(Keys.DOWN).key_up(Keys.DOWN).perform()
more = driver.find_element_by_link_text("阅读更多")ActionChains(driver).move_to_element(more).click(more).perform() # 点击阅读更多
复制代码

记录时间

今天是持续写作的第 <font color=red>280</font> / 365 天。可以<font color=#04a9f4>关注</font>我,<font color=#04a9f4>点赞</font>我、<font color=#04a9f4>评论</font>我、<font color=#04a9f4>收藏</font>我啦。


发布于: 2022 年 03 月 02 日阅读数: 15
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论 (1 条评论)

发布
用户头像
标签是3月月更哦
20 分钟前
回复
没有更多了
通过简书网学习 ActionChains,selenium webdriver 学习第3篇_3月日更_梦想橡皮擦_InfoQ写作平台