python自动化和爬虫先学哪个_小白学 Python 爬虫(27):自动化测试框架 Selenium 从入门到放弃(上)...

ec4b8301bfa3278f1c585824b93b032b.png

人生苦短,我用 Python

前文传送门:

引言

e8fd26164fa147249541726b9a787eb5.png

前面连续几篇爬虫实战不知道各位同学玩的怎么样,小编是要继续更新了,本篇我们来介绍一个前面已将安装过的工具: Selenium ,如果说是叫爬虫工具其实并不合适,在业界很多时候是拿来做自动化测试的,所以本篇的标题也就叫成了自动化测试框架。

至于为什么叫这个名字我们就不去深究了,老外起名字的想象力还是相当可以的。

它可以通过驱动程序驱动浏览器执行特定的动作,这个特性对我们爬取由 JavaScript 动态渲染的页面是非常友好的。

因为由 JavaScript 动态渲染的页面,这种页面上的 JavaScript 通常经过了编译打包,看到的都是简码,非常难以阅读。

其实他们编译打包的目的就是不想让别人看,但是由于浏览器的特性由所有人都看得到,这个就比较尴尬了。。。

比较常见的打包方式有 webpack 打包等等。

有感兴趣的同学可以在留言区留言,人多的话小编后续可以分享一些前端的内容。

6ecdac1a90f83eb6fc211b88b9b80bfd.png

前置准备

在开始之前,如果还没安装过环境的同学建议还是翻一翻前面你的文章,先把环境搞定。

请确认自己已经安装了 Chrome 浏览器并且也已经正确的配置了 ChromeDriver ,然后还需要正常的安装了 Selenium 库。

首先,还是官方网址敬上:

有任何问题找官方,看不懂可以使用翻译软件。

基础操作

以上前置准备都 ok 了以后,我们开始了解一下 Selenium 的一些基础操作把。先写一点简单的小功能演示一下:

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

browser = webdriver.Chrome()

browser.get('https://www.baidu.com')

input = browser.find_element_by_id('kw')

input.send_keys('极客挖掘机')

input.send_keys(Keys.ENTER)

print(browser.current_url)

print(browser.get_cookies())

print(browser.page_source)

运行以上代码,可以看到自动弹出来一个 Chrome 浏览器,并且上面标示了: Chrome 正受到自动软件的控制 。然后打开了百度,在输入框中输入了 “极客挖掘机” 进行搜索。

4ef4b4d3dc99aa8312dfbed122ec333c.png

再搜索结果出来后控制台打印了当前的 URL 、 cookies 和网页的源代码。

f57d7f755679b515fa7748bf0e4312c4.png

控制台的运行结果就截个图吧,内容太长就不贴了。

可以看到, Selenium 拿到的内容,都是真实展示在浏览器中的内容。由 JavaScript 动态加载的页面生成的 DOM 节点在 Selenium 下也无所遁形。

这个很好解释,因为 Selenium 是直接拿到的浏览器展示的内容。

声明浏览器对象

Selenium 支持非常多的浏览器,如:

from selenium import webdriver

# 声明浏览器对象,需对应的驱动程序方可使用

browser = webdriver.android()

browser = webdriver.blackberry()

browser = webdriver.chrome()

browser = webdriver.edge()

browser = webdriver.firefox()

browser = webdriver.ie()

browser = webdriver.opera()

browser = webdriver.phantomjs()

browser = webdriver.safari()

可以看到有我熟悉的 IE 浏览器、 Edge 浏览器、 FireFox 浏览器、 Opera 浏览器等等。

访问网页

访问网页可以使用 get() 方法,参数传入我们想要访问的网站即可:

from selenium import webdriver

browser = webdriver.Chrome()

browser.get('https://www.jd.com/')

print(browser.page_source)

通过上面两行代码,我们可以看到自动打开了浏览器并访问的京东,在控制台打印了京东的源代码。

当然,如果想要程序自动关闭浏览器的话可以使用:

browser.close()

这句话加在上面可以看到浏览器打开后访问京东一闪而过就关掉了。

查找单个节点

我们获取到网页后,第一步肯定是要先查找到 DOM 节点啊,然后可以直接从 DOM 节点中获取数据。

不过有了 Selenium 以后,我们不仅可以查找到节点获取数据,还可以模拟用户操作,比如在搜索框输入某些内容,点击按钮等等操作,不过还是先看看怎么查找节点:

fe43ab6153b452cf986ae2e548139973.png

从上面这张图可以看到,我们想要获取输入框,可以通过 id 进行获取,那么我们接下来的代码要这么写:

from selenium import webdriver

browser = webdriver.Chrome()

browser.get('https://www.jd.com/')

input_key = browser.find_element_by_id('key')

print(input_key)

结果如下:

可以看到,我们获得的元素类型是 WebElement 。

小编这里顺手列出所有的获得单个节点的方法:

find_element_by_id

find_element_by_name

find_element_by_xpath

find_element_by_link_text

find_element_by_partial_link_text

find_element_by_tag_name

find_element_by_class_name

find_element_by_css_selector

此外, selenium 还未我们提供了一个通用方法 find_element() ,它需要传入两个参数:查找方式 By 和值。实际上上面示例中的查找方式还可以这么写(效果完全一样哦~~~):

from selenium import webdriver

from selenium.webdriver.common.by import By

browser = webdriver.Chrome()

browser.get('https://www.jd.com/')

input_key1 = browser.find_element(By.ID, 'key')

print(input_key1)

结果小编就不贴了,各位同学可以自己运行下进行对比。

查找多个节点

比如我们要查找左边的这种导航条的所有条目:

ddf3c67bd0dbad79f86d87da3a1949b9.png

可以这么写:

lis = browser.find_elements_by_css_selector('.cate_menu li')

print(lis)

结果如下:

[, ,

......]

太多了,小编后面的结果就省略掉了。

下面列出来所有的多节点选择的方法:

find_elements_by_name

find_elements_by_xpath

find_elements_by_link_text

find_elements_by_partial_link_text

find_elements_by_tag_name

find_elements_by_class_name

find_elements_by_css_selector

同样,多节点选择也有一个 find_elements() 的方法,小编这里就不展示,各位同学自己试一试。

本篇先到这里,下一篇我们接着介绍交互操作。

示例代码

本系列的所有代码小编都会放在代码管理仓库 Github 和 Gitee 上,方便大家取用。

参考

原文出处:https://www.cnblogs.com/babycomeon/p/12100183.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值