问题:selenium模块和爬虫之间具有怎样的关联?
- 便捷的获取网站中动态加载的数据
- 便捷实现模拟登录
什么是selenium模块?
- 基于浏览器自动化的一个模块。
selenium使用流程:
-
环境安装: pip install selenium
-
下载一个浏览器的驱动程序(谷歌浏览器)
-
1)将下载下来的驱动程序解压,将chromedriver.exe复制到我们的项目模块中,即可使用。
-
2)或者将chromedriver.exe复制到谷歌浏览器的安装目录下,然后将路径添加到我的电脑的环境变量Path中。详见https://blog.csdn.net/qq_24394093/article/details/82254403
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