Selenium(待更新)

177 阅读2分钟

Selenium

下载浏览器驱动

chrome

chromedriver.storage.googleapis.com/index.html

npm.taobao.org/mirrors/chr…

Firefox

github.com/mozilla/gec…

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')