Selenium
Selenium是最广泛使用的开源 WebUI(用户界面)自动化测试套件之一,他是一套Web网站 的程序自动化操作解决方案。
Selenium 支持的语言包括C#,Java,Perl,PHP,Python 和 Ruby。目前,Selenium Web 驱动程序最受 Python 和 C#欢迎。
Selenium 测试脚本可以使用任何支持的编程语言进行编码,并且可以直接在大多数现代 Web 浏览器中运行。
在爬虫领域 selenium 同样是一把利器,能够解决大部分的网页的反爬问题。
通过Selenium,我们可以写出自动化程序,像人一样在浏览器里操作web界面。 比如点击界面按钮,在文本框中输入文字等操作。
而且还能从web界面获取信息。 比如获取 火车、汽车票务信息,招聘网站职位信息,财经网站股票价格信息等等,然后用程序进行分析处理。
1. 常规查找元素
用chrome浏览器访问百度,按F12后,点击下图箭头处的Elements标签,即可查看页面对应的HTML 元素.
然后,再点击 最左边的图标,如下所示
1.1 根据ID查找元素
举例来说,页面上有个输入股票名称的输入框,使用鼠标右键菜单 查看该 input元素,会发现它有一个属性叫id。
代码如下所示:
from selenium import webdriver
from selenium.webdriver.common.by import By
# 创建 WebDriver 对象
wd = webdriver.Chrome()
# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.get('https://www.byhy.net/_files/stock1.html')
# 根据id选择元素,返回的就是该元素对应的WebElement对象
element = wd.find_element(By.ID, 'kw')
# 通过该 WebElement对象,就可以对页面元素进行操作了
# 比如输入字符串到 这个 输入框里
element.send_keys('通讯\n')
1.2 根据class属性查找元素
web自动化的难点和重点之一,就是如何 选择 我们想要操作的web页面元素。
除了根据元素的id ,我们还可以根据元素的 class 属性选择元素。
就像一个 学生张三 可以定义类型为中国人或者学生一样, 中国人和学生 都是张三的类型。
元素也有类型, class 属性就用来标志着元素类型 。
样例网页html如下所示:
<body>
<div class="plant"><span>土豆</span></div>
<div class="plant"><span>洋葱</span></div>
<div class="plant"><span>白菜</span></div>
<div class="animal"><span>狮子</span></div>
<div class="animal"><span>老虎</span></div>
<div class="animal"><span>山羊</span></div>
</body>
如果我们要选择所有的动物, 就像下面可以这样写:
wd.find_elements(By.CLASS_NAME, 'animal')
而如果我们使用 wd.find_element
(注意少了一个s) 方法, 就只会返回第一个元素。
运行代码如下所示:
from selenium import webdriver
from selenium.webdriver.common.by import By
# 创建 WebDriver 实例对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome()
# WebDriver 实例对象的get方法 可以让浏览器打开指定网址
wd.get('https://cdn2.byhy.net/files/selenium/sample1.html')
# 根据 class name 选择元素,返回的是 一个列表
# 里面 都是class 属性值为 animal的元素对应的 WebElement对象
elements = wd.find_elements(By.CLASS_NAME, 'animal')
# 取出列表中的每个 WebElement对象,打印出其text属性的值
# text属性就是该 WebElement对象对应的元素在网页中的文本内容
for element in elements:
print(element.text)