selenium自动化访问跳转新窗口、新标签的方法——切换句柄

0 环境配置

系统: win7
python版本: 3.6.4
selenium版本: 3.14.0
火狐浏览器: 65.0.2 (64 位)
geckodriver: geckodriver-v0.21.0-win64.zip

1 句柄切换

   有时候当我们使用selenium,模拟网页点击的时候,会出现一个新的窗口或者新的标签。但是,此时,我们的driver没有及时更新,还是开始页面时的那个窗口的模拟登入(其实也就是一个句柄,“句柄是一种特殊的智能指针”,这个句柄指向最开始的页面)。但是,当我发生点击动作的时候,页面发生切换,但是句柄还是原始的句柄,此时我们需要切换句柄操作,来调整至新出现的界面。具体操作如下:

next_click.click()  # 模拟点击下一页的时候,会出现一个新窗口或者新标签
n = drive.window_handles  # 这个时候会生成一个新窗口或新标签页的句柄,代表这个窗口的模拟driver
print('当前句柄: ', n)  # 会打印所有的句柄
drive.switch_to_window(n[-1])  # driver切换至最新生产的页面

2 其他selenium爬虫技巧

2.1 访问某一标签下属性中的内容

比如,我要获取这个python点击下的url:
在这里插入图片描述

url = drive.find_element_by_xpath(').get_attribute('href')  # 获取某一页中的,某个标签下某个属性的内容

2.2 关掉当前窗口、标签页

当前drive的句柄是你需要关闭窗口、标签页的:

drive.close()  # 注: 当前drive的句柄是你需要关闭窗口、标签页的

2.3 模拟鼠标滑动验证条

有时候,会遇见简单的验证滑动条的问题,就像这个:
在这里插入图片描述
此时,需要模拟一个鼠标的滑动,参考如下:

slider = drive.find_element_by_xpath('***')  # 滑动条那个小块的位置

velocity = [5, 6, 19, 40, 40, 50]  # 150长度, 根据进度条的长度,来设置滑动距离
ActionChains(drive).click_and_hold(slider).perform()  # 点击滑块,并保持
  for v in velocity:
      c = random.randint(0, 2)  # 为了反反爬虫,设计不定操作
      v = v+c  # 加入不定因素
      ActionChains(drive).move_by_offset(xoffset=v, yoffset=0).perform()  # 按照预先设计速率滑动
ActionChains(drive).release().perform()  # 释放

猜你喜欢

转载自blog.csdn.net/qq_40260867/article/details/90632890