selenium webdriver API

selenium webdriver API

实例化webdriver

# 导入webdriver方法
from selenium import webdriver

# 实例化webdriver Chrome 浏览器(自动打开Chrome浏览器)
driver = webdriver.Chrome()

输入网址

# 导入webdriver方法
from selenium import webdriver

# 实例化webdriver Chrome 浏览器(自动打开Chrome浏览器)
driver = webdriver.Chrome()

# 输入网址
driver.get('https://www.baidu.com')

定位元素(selenium4 用 By 来定位元素)

# 导入 By 方法
from selenium.webdriver.common.by import By

# 通过 ID 查找元素
html标签:
<div id="kw"></div>

driver.find_element(By.ID, 'kw')

# 通过 NAME 查找元素
html标签:
<div name="sn"></div>

driver.find_element(By.NAME, 'sn')

# 通过 CLASS_NAME 查找元素
html标签:
<div class="cla"></div>

driver.find_element(By.CLASS_NAME, 'cla')

# 通过 TAG_NAME 查找元素(标签,例如:input/span/div标签)
html标签:
<div>
	<input>
	<span></span>
</div>

driver.find_element(By.TAG_NAME, 'div')
driver.find_element(By.TAG_NAME, 'input')
driver.find_element(By.TAG_NAME, 'span')

# 通过 LINK_TEXT 查找元素(专门用来定位文本链接)
html标签:
<a href="http://news.baidu.com">百度新闻</a>

driver.find_element(By.LINK_TEXT, '百度新闻')

# 通过 PARTIAL_LINK_TEXT 查找元素(PARTIAL_LINK 是对 LINK 的一种补充,有些文本链接较长,这时候我们就可以只取一部分文本进行定位)
html标签:
<a href="http://www.runoob.com">菜鸟教程,学的不仅是技术,更是梦想!</a>

driver.find_element(By.PARTIAL_LINK_TEXT, '菜鸟教程')
driver.find_element(By.PARTIAL_LINK_TEXT, '梦想')

# 通过 XPATH 查找元素
# 通过谷歌浏览器 F12 功能,可以查看页面 HTML 元素,鼠标右键点击 HTML 标签,就可以复制 XPATH 路径
# 复制 XPATH 绝对路径
![image](https://img2022.cnblogs.com/blog/1305601/202202/1305601-20220215111002923-1969450375.png)

driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]/input')

# 复制 XPATH 相对路径
![image](https://img2022.cnblogs.com/blog/1305601/202202/1305601-20220215111054884-1854337921.png)

driver.find_element(By.XPATH, '//*[@id="kw"]')

# 层级与属性结合定位
html标签:
<div id="kw">
	<input>
	<div>
		<span>新闻</span>
		<span>地图</span>
	</div>
</div>
# 通过定位 input 标签的上级标签 div,来找到 input 标签, 如果父元素有重复值,可继续向上查找爷爷元素,最终找到想要定位的元素标签
driver.find_element(By.XPATH, '//*[@id="kw"]') //可以用 * 号匹配所有元素,查找 id = "kw" 的元素
driver.find_element(By.XPATH, '//div[@id="kw"]/input')
driver.find_element(By.XPATH, '//div[@id="kw"]/div/span[2]') //定位到第二个 span 元素

# 通过使用逻辑运算符来组合条件查找元素
html标签:
<input id="kw" class="su" name="ie">
<input id="kw" class="aa" name="ie">
<input id="bb" class="su" name="ie">

driver.find_element(By.XPATH, '//input[@id="kw" and @class="su"]') //后面可以跟多个 and 来组合查询

# 通过 CSS_SELECTOR 来查找元素
html标签:
<div id="aw">
	<div name="sec">
		<span id="sw"></span>
		<input type="password" name="bbq">
	</div>
	<div class="syt"></div>
</div>

driver.find_element(By.CSS_SELECTOR, '#sw') //查询 id="sw" 元素
driver.find_element(By.CSS_SELECTOR, '.syt') //查询 class="syt" 元素
driver.find_element(By.CSS_SELECTOR, 'div > div > span#sw') //通过父子关系结合元素 id 查找元素
driver.find_element(By.CSS_SELECTOR, 'div > div.syt') //通过父子关系结合元素 class 查找元素
driver.find_element(By.CSS_SELECTOR, '[type="password"]') //通过属性 type 查找元素
driver.find_element(By.CSS_SELECTOR, '[name="bbq"]') //通过属性 name 查找元素
driver.find_element(By.CSS_SELECTOR, 'div#aw > [name="sec"] > span#sw') // 组合定位 查找元素

控制浏览器

控制浏览器窗口大小

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')

# 参数数字为像素点
print('设置浏览器宽 480, 高 800 显示')
driver.set_window_size(480, 800)

# 关闭浏览器
driver.quit()

控制浏览器最大化显示

driver.maximize_window()

控制浏览器最小化显示

driver.minimize_window()

控制浏览器后退、前进

driver.back() //浏览器返回上一页
driver.forward() //浏览器前进到下一页

模拟刷新浏览器页面

driver.refresh()

示例

from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()

# 浏览器最大化
driver.maximize_window()
sleep(1)

# 访问百度首页
first_url = 'https://www.baidu.com'
print(f'now access {first_url}')
driver.get(first_url)
sleep(1)

# 访问新闻页面
second_url = 'https://news.baidu.com'
print(f'now access {second_url}')
driver.get(second_url)
sleep(1)

# 返回(后退)到百度首页
print(f'back to {first_url}')
driver.back()
sleep(1)

# 前进到新闻页
print(f'forward to {second_url}')
driver.forward()
sleep(1)

# 刷新当前页面
print(f'refresh the {second_url}')
driver.refresh()
sleep(1)

# 浏览器最小化
driver.minimize_window()
sleep(3)

# 关闭浏览器
print('close the chrome...')
driver.quit()

简单元素操作

# 清除文本内容
clear()
# 输入文本内容
send_keys('要输入的文本内容')
# 模拟点击元素操作
click()

html标签:

<div>
	<input type="text" id="su">
	<input type="submit" id="kw">
</div>

python代码:

from selenium import webdriver   //导入 webdriver 方法
from selenium.webdriver.common.by import By  //导入 By 方法

driver = webdriver.Chrome() //实例化 webdriver 中的 Chrome 对象
driver.maximize_window() //浏览器最大化显示

driver.find_element(By.ID, 'su').send_keys('test...test...test...') //定位 id="su" 的 input 框,输入文本内容
driver.find_element(By.ID, 'su').clear() //定位 id="su" 的 input 框,清除里面的文本内容
driver.find_element(By.ID, 'kw').click() //定位 id="kw" 的按钮,模拟点击该按钮操作

WebElement 接口常用方法

submit()

submit()方法用于提交表单。例如:在搜索框输入关键字之后的“回车”操作,就可以通过 submit() 方法来模拟

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get('http://www.youdao.com')

driver.find_element(By.ID, 'query').send_keys('hello')
# 提交输入框内容
driver.find_element(By.ID, 'query').submit()

# 关闭浏览器
driver.quit()

上面的例子,我们通过 submit() 提交搜索框的内容,同样达到单击“搜索”按钮的效果。有时候 submit() 可以与 click() 方法互换来使用,submit()
同样可以提交一个按钮,但 submit() 的应用范围远不及 click() 广泛。

  • size: 返回元素的尺寸
  • text: 获取元素的文本
  • get_attribute(name) 获得属性值
  • is_displayed(): 设置该元素是否用户可见
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')

# 获得输入框的尺寸
size = driver.find_element(By.ID, 'kw').size
print(size)

# 返回百度页面底部备案信息
text = driver.find_element(By.XPATH, '//div[@id="bottom_layer"]').text
print(text)

# 返回元素的属性值,可以是id, name, type或其它任意属性
attribute = driver.find_element(By.ID, 'kw')
print(attribute.get_attribute('type'))
print(attribute.get_attribute('name'))
print(attribute.get_attribute('id'))
print(attribute.get_attribute('maxlength'))
print(attribute.get_attribute('class'))
print(attribute.get_attribute('autocomplete'))

# 返回元素的结果是否可见
print(attribute.is_displayed())

# 关闭浏览器
driver.quit()
posted @ 2022-02-15 10:53  我从没想过未来  阅读(67)  评论(0编辑  收藏  举报