Selenium是什么:
为什么要应用在爬虫中(与爬虫之间的关联):
应用场景:
弊端:
首先进行环境安装
pip install selenium
然后准备好某一款浏览器的驱动程序,我使用的是谷歌的驱动程序
推荐一个网址:http://chromedriver.storage.googleapis.com/index.html
查看驱动和浏览器的映射关系:https://blog.csdn.net/huilan_same/article/details/51896672
接下来上代码讲解:
自动打开百度搜索美女然后点击搜索后点击进入图片
from selenium import webdriver
from time import sleep
# 后面是你的浏览器驱动位置,记着前面加上r防止字符转义
# 如果驱动程序放入环境变量中就可以不写参数,但是我没配0.0
driver = webdriver.Chrome(executable_path='chromedriver.exe')
# 用get打开百度页面
driver.get('http://www.baidu.com')
# 查找页面的"设置"选项,并进行点击
driver.find_elements_by_link_text('设置')[0].click()
# 防止加载不出来停1秒
sleep(1)
# 点击搜索设置
driver.find_elements_by_link_text('搜索设置')[0].click()
sleep(1)
# 选中每页显示50条数据
m = driver.find_element_by_id('nr')
sleep(1)
m.find_element_by_xpath('//*[@id="nr"]/option[3]').click()
m.find_element_by_xpath('.//option[3]').click()
sleep(1)
# 点击保存设置
driver.find_elements_by_class_name("prefpanelgo")[0].click()
sleep(1)
# 处理弹出的警告页面,点击确定是accept() 点击取消dismiss()
driver.switch_to_alert().accept()
sleep(1)
# 找到百度的输入框,并输入 美女 也可以用xpath来做
driver.find_element_by_id('kw').send_keys('美女')
sleep(2)
# 点击搜索按钮进行跳转页面
driver.find_element_by_id('su').click()
# 注意一定要防止页面没加载出来
sleep(2)
# 在打开的页面中找到美女_海量精选高清图片_百度图片并逐个点击'
driver.find_element_by_xpath('//*[@id="1"]/h3/a').click()
sleep(1)
然后点击运行,就可以看到效果了
Selenium支持xpath解析但是你要确定你安装了lxml
pip install lxml
如何操作已经在代码注释中解释了,就不在赘述
这里补充几个方法:
一下方法都简历在创建好了浏览器实例的情况下
即driver = webdriver.Chrome(executable_path=‘chromedriver.exe’)
实际案例:
自动打开京东搜索有滑动到屏幕最底部
from selenium import webdriver
from time import sleep
#1.基于浏览器的驱动程序实例化一个浏览器对象
# 如果驱动程序放入环境变量中就可以不写参数,但是我没配0.0
bro = webdriver.Chrome(executable_path='chromedriver.exe')
# 对目的网站发起请求(用浏览器发起,就是你的驱动程序)
bro.get('https://www.jd.com/')
# 我想在京东的搜索框中录入一个东西点击搜索
# 先定位到搜索框
search_text = bro.find_element_by_xpath('//*[@id="key"]')
search_text.send_keys('苹果') # 向标签中录入数据
# 定位到搜索按钮
btn = bro.find_element_by_xpath('//*[@id="search"]/div/div[2]/button')
btn.click() # 模拟鼠标单击一下
sleep(1) # 停2S
# 在搜索结果页面进行滚轮向下滑动的操作(执行JS操作:js注入)
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
sleep(1)
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
输出源码
print(bro.page_source)
# 2s后关闭浏览器
sleep(2)
# 动作链:一系列连续的动作(滑动动作)
from selenium.webdriver import ActionChains
from selenium import webdriver
from time import sleep
url = 'https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
bro = webdriver.Chrome(executable_path='chromedriver.exe')
bro.get(url)
sleep(1)
# 如果通过find系列的函数进行标签定位发现标签是存在
# 与iframe(第二窗口)下面,就会定位失败
# 解决方案使用switch_to即可
bro.switch_to.frame('iframeResult')
div_tag = bro.find_element_by_xpath('//*[@id="draggable"]')
# 对div_tag进行滑动操作
action = ActionChains(bro) # 选中的对象是bro 浏览器打开的对象
action.click_and_hold(div_tag)# 单击且长按 这样才能滑动
for i in range(6):
# perform让动作链立即执行
action.move_by_offset(10,15).perform()#右下10,15像素
sleep(0.5)
action.release() # 松开长按
无头浏览器即无界面浏览器,我们在请求数据的时候有时并不需要看到打开浏览
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
# 创建一个参数对象,用来控制chrome以无界面模式打开
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
# 创建浏览器对象
browser = webdriver.Chrome(executable_path='chromedriver.exe', chrome_options=chrome_options)
# 上网
browser.set_window_size(1920, 1080)
browser.get('http://www.baidu.com/')
time.sleep(3)
# 进行截屏并保存图片到本地
browser.save_screenshot('baidu.png')
# 输出源码
print(browser.page_source)
# 关闭浏览器
browser.quit()
以上就是Selenium模块和ActionChains的基础运用了,复杂的运用正在研究中,如有问题欢迎指出