selenium自动化访问跳转新窗口、新标签的方法——切换句柄(反反爬虫)
文章目录
0 环境配置
1 句柄切换
2 其他selenium爬虫技巧
2.1 访问某一标签下属性中的内容
2.2 关掉当前窗口、标签页
2.3 模拟鼠标滑动验证条
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切换至最新生产的页面
1
2
3
4
2 其他selenium爬虫技巧
2.1 访问某一标签下属性中的内容
比如,我要获取这个python点击下的url:
url = drive.find_element_by_xpath(').get_attribute('href') # 获取某一页中的,某个标签下某个属性的内容
1
2.2 关掉当前窗口、标签页
当前drive的句柄是你需要关闭窗口、标签页的:
drive.close() # 注: 当前drive的句柄是你需要关闭窗口、标签页的
1
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() # 释放
————————————————
版权声明:本文为CSDN博主「我叫蒋哈哈」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40260867/java/article/details/90632890