微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

selenium学习

目录:

1:建议

1.1:爬虫的建议

  • 1:减少爬虫爬取网站的次数,因为会出现反爬
  • 2:在爬取之前,要关注所要爬取网页的类型页面:H5、App
    • H5:现在学习爬取的数据就是从H5页面上爬取下来的数据
  • 3:使用伪装:使用代理IP、随机请求头
  • 4:利用多线程分布式来爬取数据
    • 在不被发现的情况下,我们尽可能的提高爬取的速度
    • 缺点:报bug的频率会增高、代码复杂

1.2:随机UA

  • 需要导入一个第三方的库: fake_UaerAgent
  • 随机的ua:UA = UesrAgent()
  • 指定一个确定的浏览器:
Ua = UserAgent()
Ua.chrome

2:selenium背景

2.1:静态网页和动态网页

  • 以前我们爬取的都是,静态的网页。静态网页就是说:我们向一个网页发起请求,获得这个网页中的响应数据,获得的响应数据在这个网页的源码中可以找的到。
  • 动态网页的请求:网页的数据并不在这个请求的url下面,这些数据而是通过(大多数的方式)Ajax方式加载出来的。
  • Ajax:在不更新整个页面的情况下,采用局部更新的方式来获取数据的方法,也就是采用异步更新的方法

2.2:如何爬取动态网页的数据

  • 网页上有我们要爬取的数据,但是网页的源码中没有该数据的解决方法

2.2.1:获取数据的真正接口

  • 要分析郑真正的Ajax接口,通过代码来请求这个接口的url,从而获取真正地数据
  • 分析数据的接口比较的麻烦,但是代码的编写比较容易
  • 一般情况下,在网页的源码中的XHR就是Ajax数据;XHR:Xml Http Request

2.2.2:通过selenium来模拟浏览器获取网页的数据

  • 通过selenium来模拟浏览器的行为动作
  • 代码比较麻烦,实现起来较为麻烦

3:selenium如何使用

  • 1:安装一个驱动:webdriver;注意一定要和自己的浏览器版本一样
  • 2:安装一个第三方的库:pip install selenium

4:phantomjs

4.1:Phantomjs介绍

  • 俗称无头浏览器;已经过时了
  • 称为无头浏览器的原因是应为这个驱动,没有和用户的交互界面,所有的动作用户都看不到

4.2:为什么使用这个技术

  • 有的老的程序用的还是这个技术
  • 对比这学习chromedriver的区别

4.3:phantomjs快速入门

from selenium import webdrive

# 添加驱动,括号里面的是驱动的path,可以把驱动放在python的解释器里面,可以不用写path,一劳永逸,chrome也可以这样。
dirve = webdiver.phantomjs()

4.4:phantomjs常用方法

4.4.1:get()方法

driver.get(url)		# 加载一个网站
  • 返回结果:加载一个网站

4.4.2:save_screenshot()方法

driver.save_screenshot('截屏图片的名字')		# 作用:把当前页面截屏后返回

4.4.3:find_element_by_id方法

a = driver.find_element_by_id('标签名')		# 定位id标签

4.4.4:san.keys()方法

a.send.keys('python')		# 输入内容

4.4.5:click()方法

  • 相当于按个回车键
  • 代码
driver.find_element_by_id('su').click()
  • 返回值:相当于按了一下回车键

4.4.6:current_url

driver.current_url
  • 返回值:返回当前的url

5:chromedriver(重点)

# 导入模块
from selenium import weddriver

# 添加驱动
driver = webdriver.chrome()

# 加载页面
driver.get('www.xxx.com')

# 关闭窗口或关闭一个窗口
driver.close()

# 关闭驱动(关闭所有的窗口)
driver.quit()

5.1:chromedriver快速入门

  • 在使用chromedriver的时候,要先驱动程序,才可以使用代码
# 添加驱动
driver = webdriver.chrome()
  • 返回值:把驱动给添加到pyhon的解释器中

5.1.1:get()方法

# 加载页面
driver.get('www.xxx.com')
  • 返回值:加载一个窗口

5.1.2:close()

# 关闭窗口或关闭一个窗口
driver.close()

5.1.3:quit()方法

# 关闭驱动(关闭所有的窗口)
driver.quit()

5.1.4:maxmize_windowe()方法

driver.maxmize_windowe()
  • 返回值:把加载出来的页面放到最大

5.2:selenium的前生今世

  • selenium不是为爬虫而作出来的,而是前端的一个技术,所以有些技术无法做到

6:定位元素和操作元素

  • 注意:webdrivier是一个
  • time.sleep(n)
    • 延迟n秒

6.1:操作元素

# 导入库
from selenium import webdriver

# 加载驱动
webdriver.chrome()

6.2:定位输入框

6.2.1:通过id定位

方法1

find_element_by_id('标签名')。send.keys('要输入的数据')
  • 返回值:在定位的标签中输入要输入的值

方法2

find_element(By.ID,'id标签名').send_keys('要输入的值')
  • 返回值:在定位的标签中输入要输入的值

6.2.2:通过class_name来定位

方法1

find_element_by_class_name('要寻找的class_name标签').send.keys('在标签里面输入的内容')
  • 返回值:在定位的class_name标签中输入要输入的值

方法2

find_element(BY.CLASS.NAME,‘要寻找的class_name标签’).send.keys('在标签里面输入的内容')

6.2.3:通过name来定位

方法1

find_element_by_name('要定位的name标签').send.keys('输入的数据')
  • 返回值:在定位的name标签中输入输入输入的数据

方法2

find_element(BY.NAME,'要定位的name标签').send,keys('要输入的数据')
  • 返回值:在定位的name标签中输入输入输入的数据

6.2.4:通过标签的名字来定位

head = drivrer.find_element_by_tag_name('head')

6.2.5:通过xpath来定位:

  • 使用的条件
    • 在没有id、name、class_name的时候使用这个方法
  • 代码
driver.find_element_by_xpath('xpath的语法').send.keys('要输入的数据')
  • 返回值:找到xpath语法定位的标签,在里面输入输入的数据

6.2.6:定位多的标签

driver.find_element_by_tag_name('input')
  • 返回值:定位到所有名字为input的标签

7:操作元素

7.1:send.keys()方法

driver.find_element_by_xpath('xpath的语法').send.keys('要输入的数据')
  • 返回值:输入数据

7.2:clear()

inputTag = driver.find_element_by_id('kw')
inputTag.send_keys('红苹果')
time.sleep(2)
inputTag.clear() # 清空内容

7.3:click()

button = driver.find_element_by_id('su')
button.click()
  • 返回值:点击一下,相当于回车

8:操作select标签

  • select:下拉框的意思
  • 方法:先定位这个下拉框的位置在操作
  • select标签:不能直接点击,因为点击之后还要选中其中的元素
  • 需要导入一个库:from selenium.webdriver.support.ui import Select

8.1:定位方法

8.1.1:根据值来定位

selectTag.select_by_value('JP')
  • 返回值:点击这个的标签

8.1.2:根据索引来定位

selectTag.select_by_index(2)
  • 返回值:返回下拉框当中的第二个元素,元素的顺序是从0开始的

8.3:切换iframe标签

  • iframe:是Html的一种标签,文档中的文档
  • 使用时机:如果有iframe标签,而这个标签中刚好有我们需要的数据的时候,就需要先切换把定位切换到这个ifrme之下。
  • 代码
# 死代码,只要记住就行了
driver.switch_to_frame(driver.find_element_by_id('iframe')		# 过时的方法
driver.switch_to.frame(driver.find_element_by_id('iframe'))		# 新的方法

8.4:操作非select标签的下拉框

8.4.1:解决方法

  • 1:先找到这个iframe的下拉框
  • 2:点击展开
  • 3:点击自己需要的点击一下

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐