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:sand.keys()方法

####### 只有input标签可以sand.keys,别的标签会报错。

  • 输入数据
  • 代码:
a.send.keys('python')		# 输入内容
  • 返回值:在这个标签里面输入数据

4.4.5:click()方法

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

4.4.6:current_url

  • 返回当前的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秒
  • find_element:是获取第一个满足条件的元素
  • find_element:获取所有所有满足条件的元素

6.1:操作元素

  • 代码:
# 导入库
from selenium import webdriver

# 加载驱动
webdriver.chrome()

6.2:定位输入框

6.2.1:通过id定位

方法1
  • 代码:
find_element_by_id('标签名')。send.keys('要输入的数据')
  • 返回值:在定位的标签中输入要输入的值
方法2
  • 需要导入一个方法:from selenium.webdriver.common.by import By
  • 代码:
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
  • 需要导入一个方法:from selenium.webdriver.common.by import By
  • 代码
find_element(BY.CLASS.NAME,‘要寻找的class_name标签’).send.keys('在标签里面输入的内容')
  • 返回值:在定位的class_name标签中输入内容

6.2.3:通过name来定位

方法1
  • 代码
find_element_by_name('要定位的name标签').send.keys('输入的数据')
  • 返回值:在定位的name标签中输入输入输入的数据
方法2
  • 需要导入一个方法:from selenium.webdriver.common.by import By
  • 代码
find_element(BY.NAME,'要定位的name标签').send,keys('要输入的数据')
  • 返回值:在定位的name标签中输入输入输入的数据

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

  • 代码
head = drivrer.find_element_by_tag_name('head')
  • 返回值:定位到名字时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标签的下拉框

  • 注意:导入的select方法只能工作在select标签下的标签,所以对于不是select标签来使用select方法会报错

8.4.1:解决方法

  • 1:先找到这个iframe的下拉框
  • 2:点击展开
  • 3:点击自己需要的点击一下
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值