python-爬虫-selenium总结

前言(使用场景)

我们在抓取⼀些普通⽹⻚的时候requests基本上是可以满⾜的. 但是, 如果遇到⼀些特殊的⽹站. 它的数据是经过加密的. 但是呢, 浏览器却 能够正常显示出来. 那我们通过requests抓取到的内容可能就不是我 们想要的结果了.

一、前期准备工作

使用selenium前需要安装浏览器相应版本的驱动并移动到python解释器的目录下 下载链接 chromedriver.storage.googleapis.com/index.html

二、基本的操作

python 复制代码
from selenium.webdriver import Chrome # 导⼊⾕歌浏览器的类
web = Chrome(executable_path="chromedriver")# 创建浏览器对象
web.get("http://www.baidu.com") # 输⼊⽹址
print(web.title) # 打印title

运⾏⼀下你会发现神奇的事情发⽣了. 浏览器⾃动打开了. 并且输⼊ 了⽹址. 也能拿到⽹⻚上的title标题.

案例:

利用抓包工具可以定位想要标签的xpath 然后利用

python 复制代码
el =web.find_element(By.XPATH,'//*[@id="changeCityBox"]/p[1]/a')   # 定位到需要点击元素的位置
el.click()  # 点击元素

又如果是定位到可以输入信息的标签要输入就可以

python 复制代码
# 找到输入框,输入python  ==>输入回车
el = web.find_element(By.XPATH,'//*[@id="search_input"]').send_keys("python",Keys.ENTER)

***********使用selenium时必须注意: 使用时当切换到其他页面时一定要用time.sleep()缓一缓,因为你页面可能还没加载完你就执行下面的操作狠狠很有可能它就会这样: 如果不知道具体该睡多久可以这样处理:

python 复制代码
while 1:
    try:
        res=web.find_element(By.XPATH,'//*[@id="repo-content-pjax-container"]//*[@class="branch"]').text
        print('已定位到元素')
        endtime= time.time()
        break
    except:
        print("还未定位到元素!")
        time.sleep(1)
print(res)
print('定位耗费时间:' + str(endtime-start_time))

有iframe时需要注意

python 复制代码
# 注意有iframe的情况也需先跳转进入iframe窗口进行爬取
web.switch_to.frame("iframe_ref")
# 要想从iframe切回来 ;
web.switch_to.default_content() 切换到原页面

在使用selenium时若打开了多个页面并且想在多个页面反复横跳可以这样:

python 复制代码
web.switch_to.window(web.window_handles[0])  #[0]就是主网页中第一个网页

对于有下拉框的那种点击切换页面的情况可以这样:

python 复制代码
sel_el =web.find_element(By.XPATH,'//*[@id="msgCenter"]/span[2]')  # 先定位到select标签
sel =Select(sel_el) # 扔给Select
for i in range(len(sel.options)):  #i就是每个下拉框索引位置
    sel.select_by_index(i)   # 切换选项

使用selenium利用验证码识别平台(超级鹰)进行各种类型验证码验证:

超级鹰的使用可以在平台是去下载源码进行使用,一看就会。

验证根据图像识别验证码输入类:

定位到验证码的xpath

python 复制代码
img = web.find_element(By.XPATH,'/html/body/div[3]/div/div[3]/div[1]/form/div/img').screenshot_as_png

这个方法可以返回一个png格式的截图,这样就可以把图片给超级鹰识别返回验证码输入。over!

验证根据图像识别需要点击的地点类:

同上丢给超级鹰后返回的是需要点击地方的坐标,然后就可遍历返回的坐标,以此使用ActionChains里的事件链去点击相应位置就可以解决 ActionChains("放入element").move_to_element_with_offset(放入点击元素横,纵坐标) 最后还要.perform进行提交才能执行这个事件链

滑块验证类:

这类比较坑的地方就是会被服务器识别出我们不是人。。。 所以需要伪装我们

python 复制代码
option = Options()   # 防止被检验出
option.add_argument('--disable-blink-features=AutomationControlled')
web = Chrome(options=option)

伪装后就使用ActionChains里的事件链就可以解决了

python 复制代码
ActionChains(web).drag_and_drop_by_offset(btn,300,0).perform() # btn是滑块区域,300,0就是滑块横坐标的始起点。perform提交就大功告成

这两个方法需要引入库

python 复制代码
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.chrome.options import Options
相关推荐
B站计算机毕业设计超人1 小时前
计算机毕业设计Python+Flask微博情感分析 微博舆情预测 微博爬虫 微博大数据 舆情分析系统 大数据毕业设计 NLP文本分类 机器学习 深度学习 AI
爬虫·python·深度学习·算法·机器学习·自然语言处理·数据可视化
waterHBO3 小时前
python 爬虫 selenium 笔记
爬虫·python·selenium
bugtraq202117 小时前
闲鱼网页版开放,爬虫的难度指数级降低。
爬虫
Bigcrab__21 小时前
Python3网络爬虫开发实战(15)Scrapy 框架的使用(第一版)
爬虫·python·scrapy
九月镇灵将21 小时前
爬虫逆向学习(六):补环境过某数四代
爬虫·补环境·瑞数
kngines1 天前
【PLW004】基于Python网络爬虫与推荐算法的新闻推荐平台v1.0(Python+Django+NLP+Vue+MySQL前后端分离)
爬虫·python·nlp·推荐算法
walk walk1 天前
免费爬虫软件“HyperlinkCollector超链采集器v0.1”
爬虫
亿牛云爬虫专家2 天前
如何通过subprocess在数据采集中执行外部命令 —以微博为例
爬虫·python·数据采集·多线程·代理ip·subprocess·微博