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
相关推荐
天天扭码2 小时前
什么?2025年了还在写传统爬虫!来试试更有爽感的AI爬虫 ψ(`∇´)ψ
爬虫·node.js·ai编程
梯度寻优者_超2 小时前
获取房源信息并完成可视化——网络爬虫实战1
爬虫
MinggeQingchun14 小时前
Python - 爬虫-网页解析数据-库lxml(支持XPath)
爬虫·python·xpath·lxml
kadog18 小时前
PubMed PDF下载 cloudpmc-viewer-pow逆向
前端·javascript·人工智能·爬虫·pdf
nongcunqq19 小时前
爬虫练习 js 逆向
笔记·爬虫
一个天蝎座 白勺 程序猿20 小时前
Python爬虫(5)静态页面抓取实战:requests库请求头配置与反反爬策略详解
开发语言·爬虫·python
iuhart20 小时前
chromedp 反反爬设计方案
爬虫
橘猫云计算机设计20 小时前
net+MySQL中小民营企业安全生产管理系统(源码+lw+部署文档+讲解),源码可白嫖!
数据库·后端·爬虫·python·mysql·django·毕业设计
爱吃泡芙的小白白21 小时前
爬虫学习——使用HTTP服务代理、redis使用、通过Scrapy实现分布式爬取
redis·分布式·爬虫·http代理·学习记录
Auroral1561 天前
【Python爬虫详解】第五篇:使用正则表达式提取网页数据
爬虫