Selenium
下载浏览器驱动
chrome
chromedriver.storage.googleapis.com/index.html
Firefox
IE
selenium-release.storage.googleapis.com/index.html
概念
WebDirver 对象选择的范围是整个web页面
WebElement 对象选择的是范围是该元素的内部
打开指定的页面
from selenium import webdriver
# 指定浏览器驱动
wd = webdriver.Chrome('./chromedriver.exe')
# 打开指定的页面
wd.get('https://www.baidu.com')
表单里输入指定的内容-id选择器
from selenium import webdriver
# 指定浏览器驱动
wd = webdriver.Chrome('./chromedriver.exe')
# 打开指定的页面
wd.get('https://www.baidu.com')
# 找到id为kw的元素
element = wd.find_element_by_id('kw')
# 表单里输入指定的内容
element.send_keys('hello world')
类选择器获取指定类下面的内容
如果是多个的话就find_elements_by_class_name 就是获取多个列表, 如果是find_element_by_class_name 就是获取第一个
from selenium import webdriver
# 指定浏览器驱动
wd = webdriver.Chrome('./chromedriver.exe')
# 打开指定的页面
wd.get('http://www.748219.com/meiwenxinshang/jingdianmeiwen/')
elements = wd.find_elements_by_class_name('la')
for item in elements:
print(item.text)
获取标签内容
如果是多个的话就
find_elements_by_tag_name就是获取多个列表, 如果是``find_element_by_tag_name` 就是获取第一个
from selenium import webdriver
# 指定浏览器驱动
wd = webdriver.Chrome('./chromedriver.exe')
# 打开指定的页面
wd.get('http://www.748219.com/meiwenxinshang/jingdianmeiwen/')
elements = wd.find_elements_by_tag_name('p')
for item in elements:
print(item.text)
选择元素内部的元素
<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<div class="header">
<span>header xxx</span>
</div>
<div class="container">
<span>hello</span>
<span>world</span>
</div>
</body>
</html>
from selenium import webdriver
# 指定浏览器驱动
wd = webdriver.Chrome('./chromedriver.exe')
# 打开指定的页面
wd.get('http://127.0.0.1/test.html')
element = wd.find_element_by_class_name('container')
# 页面范围
print('#'*50, '整个页面的范围')
span_elements1 = wd.find_elements_by_tag_name('span')
for item in span_elements1:
print(item.text)
# container类元素内的范围
print('#'*50, 'container类元素内的范围')
span_elements2 = element.find_elements_by_tag_name('span')
for item in span_elements2:
print(item.text)
输出
################################################## 整个页面的范围
header xxx
hello
world
################################################## container类元素内的范围
hello
world
隐式等待
拿到百度的第一条搜索结果,在我们程序点击搜索的时候我们的程序就马上去查找
id为1的那行代码了,此时网页可能还没有返回搜索的结果就会抛出异常,我们可以使用sleep但是不智能,使用wd.implicitly_wait(5)可以指定最大等待时间, 单位为秒。隐式等待将等待一段时间再查找元素直到超时。
from selenium import webdriver
wd = webdriver.Chrome('./chromedriver.exe')
# 隐式等待, 等待页面加载完成, 如果超出了设置时间的则抛出异常
wd.implicitly_wait(5)
wd.get('https://www.baidu.com')
element = wd.find_element_by_id('kw')
element.send_keys('hello world')
# 找到查询结构的第一个元素
first = wd.find_element_by_id('1')
print(first.text)
显示等待
获取其他元素
# 获取属性值
element.get_attribute('属性名')
# 获取整个元素的html内容
element.get_attribute('outerHTML')
# 获取某个元素内部的html内容
element.get_attribute('innerHTML')
# 获取输入框里面的文字
element.get_attribute('value')
# 获取元素文本内容的其他方式
element.get_attribute('innerText')
element.get_attribute('textContent')
# 使用css选择器查找元素
wd.find_element_by_css_selector('.article')
wd.find_element_by_css_selector('#header')
wd.find_elements_by_css_selector('span')