selenium模块的基本使用

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

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

什么是selenium模块?

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

selenium使用流程:

  • 环境安装: pip install selenium

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

  • 1)将下载下来的驱动程序解压,将chromedriver.exe复制到我们的项目模块中,即可使用。

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

    image.png

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

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

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

示例代码

from selenium import webdriver
from time import sleep
browser = 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 webdriver
from time import sleep
from 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 webdriver
from time import sleep
from 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 webdriver
from time import sleep
from 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模拟登录 :https://blog.csdn.net/qq_43401941/article/details/109152130

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值