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
相关推荐
子竹聆风12 小时前
Feapder框架UpdateItem使用技巧:如何优雅地实现"只更新有值字段"
爬虫
吴秋霖4 天前
主流反爬虫、反作弊防护与风控对抗手段
爬虫·算法·反爬虫技术
hui函数4 天前
scrapy框架-day02
后端·爬虫·python·scrapy
用户051610461674 天前
爬虫 API 技术全解析:从原理到实战的高效数据采集指南
爬虫·api
xiaoxiongip6666 天前
动态ip适合挂什么项目
网络·爬虫·python·网络协议·tcp/ip·ip
q567315236 天前
自动化拨号爬虫体系:虚拟机集群部署与增量管理
运维·爬虫·网络协议·自动化
电商API_180079052477 天前
淘宝商品视频批量自动化获取的常见渠道分享
java·爬虫·自动化·网络爬虫·音视频
果壳~7 天前
【Python】爬虫html提取内容基础,bs4
爬虫·python·html
jay神7 天前
基于Python的商品爬取与可视化系统
爬虫·python·数据分析·毕业设计·可视化系统
华科云商xiao徐8 天前
如何在C语言环境中借助Linux库构建高效网络爬虫
爬虫·数据挖掘·数据分析