博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
selenium模块的基本使用
阅读量:3942 次
发布时间:2019-05-24

本文共 3966 字,大约阅读时间需要 13 分钟。

问题:selenium模块和爬虫之间具有怎样的关联?

  • 便捷的获取网站中动态加载的数据
  • 便捷实现模拟登录

什么是selenium模块?

  • 基于浏览器自动化的一个模块。

selenium使用流程:

  • 环境安装: pip install selenium

  • 下载一个浏览器的驱动程序(谷歌浏览器)

    • 下载路径:
    • 驱动程序和浏览器的映射关系:
  • 1)将下载下来的驱动程序解压,将chromedriver.exe复制到我们的项目模块中,即可使用。

  • 2)或者将chromedriver.exe复制到谷歌浏览器的安装目录下,然后将路径添加到我的电脑的环境变量Path中。详见

    image.png

    browser = webdriver.Chrome(executable_path='./chromedriver')
  • 实例化一个浏览器对象

  • 编写基于浏览器自动化的操作代码

    • 发起请求:get(url)
    • 标签定位:find系列的方法
    • 标签交互:send_keys(‘xxx’) 输入自己想搜索的内容
    • 执行js程序:execute_script(‘jsCode’)
    • 前进/后退:back()/forward()
    • 关闭浏览器:quit()

示例代码

from selenium import webdriverfrom time import sleepbrowser = webdriver.Chrome(executable_path='./chromedriver')browser.get('https://www.taobao.com/')# 标签定位search_input = browser.find_element_by_id('q')# 标签交互search_input.send_keys('Iphone')# 执行一组 js程序# 根据电脑的高度让滚动条滚动一平的高度js = 'window.scrollTo(0, document.body.scrollHeight)'browser.execute_script(js)sleep(2)# 点击搜索按钮search_btn = browser.find_element_by_css_selector('.btn-search')search_btn.click()browser.get('https://www.baidu.com/')sleep(2)# 回退browser.back()sleep(2)# 前进browser.forward()sleep(5)browser.quit()

selenium处理iframe

  • 如果定位的标签在于iframe标签之中,则必须使用switch_to.frame(iframe的id值)
  • 动作链(拖动):from selenium.webdriver import ActionChains
    • 实例化一个动作链对象:action = ActionChains(browser)
    • 长按且点击操作:click_and_hold() 点击长按指定的标签
    • 移动偏移:move_by_offset(x, y)
    • 让动作链立即执行:perform()
    • 释放动作链对象:action.release()

代码示例

from selenium import webdriverfrom time import sleepfrom selenium.webdriver import ActionChains  # 导入动作链对应的类browser = webdriver.Chrome(executable_path='./chromedriver')browser.get('https://www.runoob.com/try/try-cdnjs.php?filename=tryhtml5_draganddrop')# 如果定位的标签是存在于 iframe标签之中的则必须通过如下操作再进行标签定位browser.switch_to.frame('iframeResult')  # 切换浏览器标签定位的作用域img = browser.find_element_by_id('drag1')print(img)# 动作链 (拖动)action = ActionChains(browser)# 点击长按指定的标签action.click_and_hold(img)for i in range(5):    # move_by_offset(x:水平, y:垂直) 做移动偏移,perform()立即执行动作链操作    action.move_by_offset(0, 20).perform()    sleep(0.3)# 释放动作链action.release()sleep(5)browser.quit()

ActionChains方法列表

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) ——拖拽到某个坐标然后松开
key_down(value, element=None) ——按下某个键盘上的键
key_up(value, element=None) ——松开某个键
move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
move_to_element(to_element) ——鼠标移动到某个元素
move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置
perform() ——执行链中的所有动作
release(on_element=None) ——在某个元素位置松开鼠标左键
send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素

selenium滑动验证

from selenium import webdriverfrom time import sleepfrom selenium.webdriver import ActionChains  # 导入动作链对应的类browser = webdriver.Chrome(executable_path='./chromedriver')browser.get('https://www.17sucai.com/preview/1673365/2019-05-24/hk/index.html')div_btn = browser.find_element_by_id('btn')div = browser.find_element_by_id('slide_xbox')print(div_btn)# 动作链 (拖动)action = ActionChains(browser)# 点击长按指定的标签action.click_and_hold(div_btn)# drag_and_drop_by_offset(source, x:水平, y:垂直) 拖拽到某个坐标然后松开,perform()立即执行动作链操作action.drag_and_drop_by_offset(div, 799, 0).perform()# 释放动作链action.release()sleep(5)browser.quit()

selenium模拟登录

from selenium import webdriverfrom time import sleepfrom selenium.webdriver import ActionChains  # 导入动作链对应的类browser = webdriver.Chrome(executable_path='./chromedriver')browser.get('https://qzone.qq.com/')# 如果定位的标签是存在于 iframe标签之中的则必须通过如下操作再进行标签定位browser.switch_to.frame('login_frame')  # 切换浏览器标签定位的作用域# 点击账号密码登录switcher_plogin = browser.find_element_by_id('switcher_plogin')switcher_plogin.click()# 定位到用户名和密码输入框username_input = browser.find_element_by_id('u')password_input = browser.find_element_by_id('p')login_button = browser.find_element_by_id('login_button')username_input.send_keys('账号')password_input.send_keys('密码')login_button.click()sleep(3)browser.quit()

下一篇 12306模拟登录 :

转载地址:http://xkiwi.baihongyu.com/

你可能感兴趣的文章
Deepin+Vscode搭建vue.js项目及Git操作
查看>>
基于Spring Security前后端分离式项目解决方案
查看>>
Vue3.0+Vite2.0项目框架搭建(一)
查看>>
Vue3.0+Vite2.0项目框架搭建(二)- 引入axios
查看>>
Vue3.0+Vite2.0项目框架搭建(三)- 引入Element3
查看>>
使用Vue CLI v4.5(+)搭建Vue3.0项目框架搭建
查看>>
Java集合框架
查看>>
线程协作与生产者消费者问题
查看>>
Vue入门
查看>>
非starter方式实现springboot与shiro集成
查看>>
Starter方式实现Springboot与Shiro集成
查看>>
移动端多页面应用(MPA)的开发(一)
查看>>
移动端多页面应用(MPA)的开发(二)
查看>>
移动端多页面应用(MPA)的开发(三)
查看>>
移动端多页面APP(MPA)开发体验
查看>>
基于深度学习知识追踪研究进展(综述)数据集模型方法
查看>>
linux常见命令与FileZilla
查看>>
PostgreSQL和ElasticSearch学习笔记
查看>>
java反射
查看>>
paint 和 paintcomponent的区别
查看>>