python爬虫之selenium的使用
一、selenium简介
1、什么是selenium
selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法执行javaScript代码的问题。
2、selenium的用途
(1)、selenium可以驱动浏览器自动执行自定义好的逻辑代码,也就是可以通过代码完全模拟成人类使用浏览器自动访问目标站点并操作,那我们也可以拿它来做爬虫。
(2)、selenium本质上是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等...进而拿到网页渲染之后的结果,可支持多种浏览器
二、selenium的安装
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium
三、selenium的基本使用
from selenium import webdriver #用来驱动浏览器的
from selenium.webdriver import ActionChains #破解滑动验证码的时候用的 可以拖动图片 from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR from selenium.webdriver.common.keys import Keys #键盘按键操作 from selenium.webdriver.support import expected_conditions as EC #和下面WebDriverWait一起用的 from selenium.webdriver.support.wait import WebDriverWait #等待页面加载某些元素 importtime
driver=webdriver.Chrome()
try: wait=WebDriverWait(driver,10)#1、访问百度driver.get('https://www.baidu.com/')#2、查找输入框# input_tag = wait.until(# # 调用EC的presence_of_element_located()# EC.presence_of_element_located(# # 此处可以写一个元组# # 参数1: 查找属性的方式# # 参数2: 属性的名字# (By.ID, "kw")# )# )input_tag=wait.until(EC.presence_of_element_located((By.ID,"kw")))
#3、在搜索框在输入要搜索的内容input_tag.send_keys('秦时明月')
# 4、按键盘回车键input_tag.send_keys(Keys.ENTER)
time.sleep(3)
finally: driver.close()
四、 等待元素被加载
selenium只是模拟浏览器的行为,而浏览器解析页面是需要时间的(执行css,js),一些元素可能需要过一段时间才能加载出来,为了保证所有元素都能查到,必须等待。1、等待的方式分两种:(1)、隐式等待:在browser.get('xxx')前就设置,针对所有元素有效
1 from selenium importwebdriver2 from selenium.webdriver importActionChains3 from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR 4 from selenium.webdriver.common.keys import Keys #键盘按键操作 5 from selenium.webdriver.support importexpected_conditions as EC6 from selenium.webdriver.support.wait import WebDriverWait #等待页面加载某些元素 7 8 browser=webdriver.Chrome()9 10 #隐式等待:在查找所有元素时,如果尚未被加载,则等10秒 11 browser.implicitly_wait(10)12 13 browser.get('https://www.baidu.com')14 15 16 input_tag=browser.find_element_by_id('kw')17 input_tag.send_keys('美女')18 input_tag.send_keys(Keys.ENTER)19 20 contents=browser.find_element_by_id('content_left') #没有等待环节而直接查找,找不到则会报错 21 print(contents)22 23 browser.close()
(2)、显式等待:在browser.get('xxx')之后设置,只针对某个元素有效
1 from selenium importwebdriver2 from selenium.webdriver importActionChains3 from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR 4 from selenium.webdriver.common.keys import Keys #键盘按键操作 5 from selenium.webdriver.support importexpected_conditions as EC6 from selenium.webdriver.support.wait import WebDriverWait #等待页面加载某些元素 7 8 browser=webdriver.Chrome()9 browser.get('https://www.baidu.com')10 11 12 input_tag=browser.find_element_by_id('kw')13 input_tag.send_keys('美女')14 input_tag.send_keys(Keys.ENTER)15 16 17 #显式等待:显式地等待某个元素被加载 18 wait=WebDriverWait(browser,10)19 wait.until(EC.presence_of_element_located((By.ID,'content_left')))20 21 contents=browser.find_element(By.CSS_SELECTOR,'#content_left')22 print(contents)23 24 25 browser.close()
五、 选择器
1、基本使用方法
1 from selenium import webdriver #用来驱动浏览器的 2 importtime3 4 ''' 5 ===============所有方法===================6 element是查找一个标签7 elements是查找所有标签8 9 1、find_element_by_link_text 通过链接文本去找10 2、find_element_by_id 通过id去找11 3、find_element_by_class_name12 4、find_element_by_partial_link_text13 5、find_element_by_name14 6、find_element_by_css_selector15 7、find_element_by_tag_name16 ''' 17 #获取驱动对象、 18 driver =webdriver.Chrome()19 20 try:21 22 #往百度发送请求 23 driver.get('https://www.baidu.com/')24 driver.implicitly_wait(10)25 26 #1、find_element_by_link_text 通过链接文本去找 27 #根据登录 28 #send_tag = driver.find_element_by_link_text('登录') 29 #send_tag.click() 30 31 #2、find_element_by_partial_link_text 通过局部文本查找a标签 32 login_button = driver.find_element_by_partial_link_text('登')33 login_button.click()34 time.sleep(1)35 36 #3、find_element_by_class_name 根据class属性名查找 37 login_tag = driver.find_element_by_class_name('tang-pass-footerBarULogin')38 login_tag.click()39 time.sleep(1)40 41 #4、find_element_by_name 根据name属性查找 42 username = driver.find_element_by_name('userName')43 username.send_keys('15622792660')44 time.sleep(1)45 46 #5、find_element_by_id 通过id属性名查找 47 password = driver.find_element_by_id('TANGRAM__PSP_10__password')48 password.send_keys('*******')49 time.sleep(1)50 51 #6、find_element_by_css_selector 根据属性选择器查找 52 #根据id查找登录按钮 53 login_submit = driver.find_element_by_css_selector('#TANGRAM__PSP_10__submit')54 #driver.find_element_by_css_selector('.pass-button-submit') 55 login_submit.click()56 57 #7、find_element_by_tag_name 根据标签名称查找标签 58 div = driver.find_element_by_tag_name('div')59 print(div.tag_name)60 61 time.sleep(10)62 63 finally:64 driver.close()
2、xpath操作
XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行查找。
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。
XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似
XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。
注意: 下面列出了最有用的路径表达式
示例:
在下面的表格中,我们已列出了一些路径表达式以及表达式的结果
3. 获取标签属性(了解)
1 from selenium importwebdriver2 3 driver = webdriver.Chrome(r'D:\BaiduNetdiskDownload\chromedriver_win32\chromedriver.exe')4 5 6 try:7 #隐式等待: 写在get请求前 8 driver.implicitly_wait(5)9 10 driver.get('https://doc.scrapy.org/en/latest/_static/selectors-sample1.html')11 12 #显式等待: 写在get请求后 13 #wait.until(...) 14 15 ''' 16 17 <html>18 <head>19 <base href='http://example.com/' />20 <title>Example website</title>21 </head>22 <body>23 <div id='images'>24 <a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>25 <a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>26 <a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>27 <a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>28 <a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>29 </div>30 </body>31 </html>32 ''' 33 #根据xpath语法查找元素 34 #/ 从根节点开始找第一个 35 html = driver.find_element_by_xpath('/html')36 #html = driver.find_element_by_xpath('/head') # 报错 37 print(html.tag_name)38 39 #// 从根节点开始找任意一个节点 40 div = driver.find_element_by_xpath('//div')41 print(div.tag_name)42 43 #@ 44 #查找id为images的div节点 45 div = driver.find_element_by_xpath('//div[@id="images"]')46 print(div.tag_name)47 print(div.text)48 49 #找到第一个a节点 50 a = driver.find_element_by_xpath('//a')51 print(a.tag_name)52 53 #找到所有a节点 54 a_s = driver.find_elements_by_xpath('//a')55 print(a_s)56 57 #找到第一个a节点的href属性 58 #get_attribute:获取节点中某个属性 59 a = driver.find_element_by_xpath('//a').get_attribute('href')60 print(a)61 62 finally:63 driver.close()
六、元素交互操作
1、点击、清除操作
1 from selenium importwebdriver2 from selenium.webdriver.common.keys importKeys3 importtime4 5 driver = webdriver.Chrome(r'D:\BaiduNetdiskDownload\chromedriver_win32\chromedriver.exe')6 7 try:8 driver.implicitly_wait(10)9 #1、往jd发送请求 10 driver.get('https://www.jd.com/')11 #找到输入框输入围城 12 input_tag = driver.find_element_by_id('key')13 input_tag.send_keys('围城')14 #键盘回车 15 input_tag.send_keys(Keys.ENTER)16 time.sleep(2)17 #找到输入框输入墨菲定律 18 input_tag = driver.find_element_by_id('key') #清除输入框内原有的内容19 input_tag.clear()20 input_tag.send_keys('墨菲定律')21 #找到搜索按钮点击搜索 22 button = driver.find_element_by_class_name('button')23 button.click()24 time.sleep(10)25 26 finally:27 driver.close()
2、获取cookies (了解)
1 from selenium importwebdriver2 importtime3 4 driver = webdriver.Chrome(r'D:\BaiduNetdiskDownload\chromedriver_win32\chromedriver.exe')5 6 try:7 driver.implicitly_wait(10)8 driver.get('https://www.zhihu.com/explore')9 print(driver.get_cookies())10 11 time.sleep(10)12 finally:13 driver.close()
3、选项卡
1 选项卡管理:切换选项卡,有js的方式windows.open,有windows快捷键:2 ctrl+t等,最通用的就是js的方式3 importtime4 from selenium importwebdriver5 6 browser =webdriver.Chrome()7 try:8 browser.get('https://www.baidu.com')9 10 #execute_script: 执行javascrpit代码 11 #弹窗操作 12 #browser.execute_script('alert("tank")') 13 #新建浏览器窗口 14 browser.execute_script(15 ''' 16 window.open();17 ''' 18 )19 time.sleep(1)20 print(browser.window_handles) #获取所有的选项卡 21 #切换到第二个窗口 22 #新: 23 browser.switch_to.window(browser.window_handles[1])24 #旧: 25 #browser.switch_to_window(browser.window_handles[1]) 26 27 #第二个窗口往淘宝发送请求 28 browser.get('https://www.taobao.com')29 time.sleep(5)30 31 #切换到第一个窗口 32 browser.switch_to_window(browser.window_handles[0])33 browser.get('https://www.sina.com.cn')34 35 time.sleep(10)36 finally:37 browser.close()
4、ActionChangs动作链
1 from selenium importwebdriver2 from selenium.webdriver importActionChains3 importtime4 5 driver =webdriver.Chrome()6 driver.implicitly_wait(10)7 driver.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')8 9 try:10 11 #driver.switch_to_frame('iframeResult') 12 #切换到id为iframeResult的窗口内 13 driver.switch_to.frame('iframeResult')14 15 #源位置 16 draggable = driver.find_element_by_id('draggable')17 18 #目标位置 19 droppable = driver.find_element_by_id('droppable')20 21 #调用ActionChains,必须把驱动对象传进去 22 #得到一个动作链对象,复制给一个变量 23 actions =ActionChains(driver)24 25 #方式一: 机器人 26 #瞬间把源图片位置秒移到目标图片位置 27 #actions.drag_and_drop(draggable, droppable) # 编写一个行为 28 #actions.perform() # 执行编写好的行为 29 30 31 #方式二: 模拟人的行为 32 source = draggable.location['x']33 target = droppable.location['x']34 print(source, target)35 36 distance = target -source37 print(distance)38 39 #perform:每个动作都要调用perform执行 40 41 #点击并摁住源图片 42 ActionChains(driver).click_and_hold(draggable).perform()43 44 s =045 while s <distance:46 #执行位移操作 47 ActionChains(driver).move_by_offset(xoffset=2, yoffset=0).perform()48 s += 2 49 50 #释放动作链 51 ActionChains(driver).release().perform()52 53 time.sleep(10)54 55 56 finally:57 driver.close()
5、前进、后退
1 from selenium importwebdriver2 importtime3 4 driver =webdriver.Chrome()5 6 try:7 driver.implicitly_wait(10)8 driver.get('https://www.jd.com/')9 driver.get('https://www.baidu.com/')10 driver.get('https://www.cnblogs.com/')11 12 time.sleep(2)13 14 #回退操作 15 driver.back()16 time.sleep(1)17 #前进操作 18 driver.forward()19 time.sleep(1)20 driver.back()21 time.sleep(10)22 23 finally:24 driver.close()
转载于:https://www.cnblogs.com/lweiser/p/11045023.html
python爬虫之selenium的使用相关推荐
- Python爬虫之selenium库使用详解
Python爬虫之selenium库使用详解 本章内容如下: 什么是Selenium selenium基本使用 声明浏览器对象 访问页面 查找元素 多个元素查找 元素交互操作 交互动作 执行JavaS ...
- python爬虫之selenium,谷歌无头浏览器
python爬虫之selenium和PhantomJS 主要的内容 lenium hantomjs 无头浏览器 的懒加载 一 什么是selenium? 介绍 它是python中的一个第三方库,对外提供 ...
- Python爬虫之selenium高级功能
Python爬虫之selenium高级功能 原文地址 表单操作 元素拖拽 页面切换 弹窗处理 表单操作 表单里面会有文本框.密码框.下拉框.登陆框等. 这些涉及与页面的交互,比如输入.删除.点击等. ...
- 从入门到入土:Python爬虫学习|Selenium自动化模块学习|简单入门|轻松上手|自动操作浏览器进行处理|chrome|PART01
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- python 模拟浏览器selenium_浅谈python爬虫使用Selenium模拟浏览器行为
前几天有位微信读者问我一个爬虫的问题,就是在爬去百度贴吧首页的热门动态下面的图片的时候,爬取的图片总是爬取不完整,比首页看到的少.原因他也大概分析了下,就是后面的图片是动态加载的.他的问题就是这部分动 ...
- python爬虫——使用selenium爬取微博数据(一)
python爬虫--使用selenium爬取微博数据(二) 写在前面 之前因为在组里做和nlp相关的项目,需要自己构建数据集,采用selenium爬取了几十万条微博数据,学习了很多,想在这里分享一下如 ...
- [Python爬虫]使用Selenium操作浏览器订购火车票
这个专题主要说的是Python在爬虫方面的应用,包括爬取和处理部分 [Python爬虫]使用Python爬取动态网页-腾讯动漫(Selenium) [Python爬虫]使用Python爬取静态网页-斗 ...
- Python 爬虫 之 Selenium 模拟打开操作浏览器爬取斗鱼全部视播相关信息,并json保存信息
Python 爬虫 之 Selenium 模拟打开操作浏览器爬取斗鱼全部视播相关信息,并json保存信息 基础: Python 爬虫 之 Selenium.webdriver 的安装,以及模拟打开操作 ...
- python抓取文献关键信息,python爬虫——使用selenium爬取知网文献相关信息
python爬虫--使用selenium爬取知网文献相关信息 写在前面: 本文章限于交流讨论,请不要使用文章的代码去攻击别人的服务器 如侵权联系作者删除 文中的错误已经修改过来了,谢谢各位爬友指出错误 ...
- python爬虫——用selenium爬取淘宝商品信息
python爬虫--用selenium爬取淘宝商品信息 1.附上效果图 2.淘宝网址https://www.taobao.com/ 3.先写好头部 browser = webdriver.Chrome ...
最新文章
- TinyFrame升级之八:实现简易插件化开发
- mysql一个死锁分析
- sql server 关键字 三
- KVM总结-KVM性能优化之网络性能优化
- flex java red5_使用 Flex 和Java servlets 将文件上传到 RED5 服务器的步骤
- 滚动到div的底部?
- 31线性空间05——列空间和零空间、维数
- 常见Linux发行版本(转载)
- 关于《大道至简》第八章的收获
- 供应商TOP10榜单!车载前装激光雷达进入规模化上车关键期
- 软件测试工程师简历模板(三年经验)
- 数模更新篇-3-因子分析模型
- Concurrency in C# Cookbook中文翻译 :c#的并发烹饪书
- win7计算机扫描仪,win7系统怎么用打印机扫描仪功能|win7系统扫描仪功能的使用方法...
- 720yun全景图+vue
- 基于JAVA高校教材征订管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
- 新出台的治理iMessage垃圾短信的规则
- 香港美国CERA机房你怎么选择?
- hadoop tyarn冲突_hadoop集群启动yarn时出现的问题和解决方法
- 锐龙r5 5500u相当于英特尔什么水平 r55500u属于哪个档次
热门文章
- JS 获取当前日期时间/时间日期格式化(时间戳 转 yyyy-MM-dd HH:mm:ss)
- Python爬取数据分析
- 视觉SLAM前端——PnP
- 计算机数学英语考本的分数线,专接本考试数学英语的成绩没有过公共线还有没有被..._公共英语考试_帮考网...
- sublime中文出现乱码怎么办?这里有办法
- c语言采用解释方式6,C语言程序设计题目及解答-01.doc
- Tensorflow2.0 自定义网络
- 超详细|算法岗学习路线大总结
- 深入理解Linux网络技术内幕(十)——帧的接收
- 美国“短命”CEO排行:神人17天即遭解雇