selenium模块和爬虫之间的关联
- 便捷的获取网站中动态加载的数据
- 便捷实现模拟登录
什么是selenium模块
基于浏览器自动化的一个模块
selenium使用流程:
- 环境安装:pip install selenium
- 下载一个浏览器的驱动程序(谷歌浏览器)- 下载路径:http://chromedriver.storage.googleapis.com/index.html
资源绑定了Chrome116对应的chhromedriver.exe
selenium的操作代码:
- 发起请求:
get(url)
- 标签定位:
find_element(By.属性, value='')
value是值 - 标签交互:
send_keys('xxx')
- 执行js程序:
excute_script('jsCode')
- 前进、后退:
back(), forward()
- 关闭浏览器:
quit()
标签定位中By的属性有:ID = "id"XPATH = "xpath"LINK_TEXT = "link text"PARTIAL_LINK_TEXT = "partial link text"NAME = "name"TAG_NAME = "tag name"CLASS_NAME = "class name"CSS_SELECTOR = "css selector"
- selenium处理iframe:
- 如果定位的标签存在于iframe中,则表明是在标签页的一个子标签页中,必须使用
switch_to.frame(id)
- 动作链(拖动):
from selenium.webdriver import ActionChains
- 实例化一个动作链对象:action = ActionChains(bro)
- click_and_hold(div):长按且点击操作
- move_by_offset(x,y)
- perform()让动作链立即执行
- action.release()释放动作链对象
selenium的常用操作自动化
找到输入框
找到搜索按钮
import time
from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Byservice = Service(executable_path='./chromedriver.exe')
browser = webdriver.Chrome(service=service)
browser.get('https://www.taobao.com/')# 标签定位
search_input = browser.find_element(By.ID, value='q') # 通过id为q找到搜索框
# 标签交互
search_input.send_keys('iphone') #发送字符串# 执行一组js程序
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
sleep(2)
# 点击搜索按钮
btn = browser.find_element(By.CSS_SELECTOR, '.btn-search') #CSS_SELECTOR用法: .classname:选择具有指定类名的元素。
btn.click() # 点击按钮
sleep(5)browser.get('https://www.baidu.com')
sleep(2)# 回退
browser.back()
time.sleep(2)# 前进
browser.forward()
sleep(2)# 退出浏览器
browser.quit()"""
By有的函数:ID = "id"XPATH = "xpath"LINK_TEXT = "link text"PARTIAL_LINK_TEXT = "partial link text"NAME = "name"TAG_NAME = "tag name"CLASS_NAME = "class name"CSS_SELECTOR = "css selector"
"""
04.动作链和iframe的处理.py
from selenium import webdriver
from time import sleepfrom selenium.webdriver import ActionChains
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Byservice = Service(executable_path='./chromedriver.exe')
browser = webdriver.Chrome(service=service)
browser.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')# 如果定位的标签是存在于iframe标签之中的,则必须通过如下操作进行标签定位
browser.switch_to.frame('iframeResult') # 切换浏览器标签定位的作用域 参数为iframe标签的id
div = browser.find_element(By.ID, 'draggable')# 动作链
action = ActionChains(browser)
# 点击长按指定的标签
action.click_and_hold(div)
for i in range(5):# perform()立即执行动作链操作# move_by_offset(x, y): x:水平方向 y:垂直方向action.move_by_offset(18, 0).perform()sleep(.5)# 释放动作链
action.release().perform()sleep(5)
browser.quit()