一、操作页面的方法
1.获取当前页面的Url函数
方法:current_url
实例:driver.current_url
2.获取元素坐标
方法:location
解释:首先查找到你要获取元素的,然后调用location方法
实例:driver.find_element_by_xpath("//*[@id='tablechart']/tbody/tr[14]/td[9]").location
3.表单的提交
方法:submit
解释:查找到表单(from)直接调用submit即可
实例:driver.find_element_by_id("form1").submit()
4.获取CSS的属性值
方法:value_of_css_property(css_name)
实例:driver.find_element_by_css_selector("input.btn").value_of_css_property("input.btn")
5.获取元素的属性值
方法:get_attribute(element_name)
实例:driver.find_element_by_id("sellaiyuan").get_attribute("sellaiyuan")
6.判断元素是否被选中
方法:is_selected()
实例:driver.find_element_by_id("form1").is_selected()
7.返回元素的大小
方法:size
实例:driver.find_element_by_id("iptPassword").size
返回值:{'width': 250, 'height': 30}
8.判断元素是否显示
方法:is_displayed()
实例:driver.find_element_by_id("iptPassword").is_displayed()
9.判断元素是否被使用
方法:is_enabled()
实例:driver.find_element_by_id("iptPassword").is_enabled()
10.获取元素的文本值
方法:text
实例:driver.find_element_by_id("iptUsername").text
11.元素赋值(输入内容)
方法:send_keys(*values)
实例:driver.find_element_by_id("iptUsername").send_keys('admin')
element.send_keys('输入的内容') #输入内容
注意如果是函数需要增加转义符u,eg.
driver.find_element_by_id("iptUsername").send_keys(u'青春')
12.返回元素的tagName
方法:tag_name
实例:driver.find_element_by_id("iptUsername").tag_name
13.删除浏览器所以的cookies
方法:delete_all_cookies()
实例:driver.delete_all_cookies()
14.删除指定的cookie
方法:delete_cookie(name)
实例:deriver.delete_cookie("my_cookie_name")
15.关闭浏览器
方法:close()
实例:driver.close()
16.关闭浏览器并且推出驱动程序
方法:quit()
实例:driver.quit()
17.返回上一页
方法:back()
实例:driver.back()
18.设置等待超时
方法:implicitly_wait(wait_time)
实例:driver.implicitly_wait(30)
19.浏览器窗口最大化
方法:maximize_window()
实例:driver.maximize_window()
20.查看浏览器的名字
方法:name
实例:drvier.name
二、获取html文件后再进行解析(翻页)
from bs4 import BeautifulSoup
from lxml import etree
#案例一:从本地读取html静态文件
Path = f'{current_dirname}/index.html'
with open(Path, encoding="utf-8") as f:
html = f.read()
#案例二:selenium翻页后获取html页面:
driver.find_element_by_xpath(r"下一页的xpath路径").click()
html = driver.page_source() #获取翻页后新页面的源码
#转化方式一: 将获取到的新页面转成xpath可以解析的对象
page_source = etree.HTML(html.encode('utf-8'))
lilist = page_source.xpath("/html/body/div[3]/div[7]/ul/li")
# 转化方式二:将获取到的新页面转成 bs4 可以解析的对象
soup = BeautifulSoup(html,'lxml')
items = soup.find_all('#id')
三、多页面切换
from selenium import webdriver
import time
browser = webdriver.Chrome()
first_url='http://www.baidu.com'
browser.find_element_by_xpath('//div/div/div/ul/li[1]/strong/a').click()
browser.switch_to_window(browser.window_handles[0])
browser.title #第一个页面
browser.switch_to_window(browser.window_handles[1])
browser.title #最后一个页面
browser.quit()
如果打开多个浏览器句柄和标签页的对应关系:
标签页顺序(按照打开顺序):1 2 3 4 5
对应的句柄 :0 4 3 2 1
四、定位
1、CSS定位
driver.find_element_by_css_selector('#id')
driver.find_element_by_css_selector('.classname')
driver.find_element_by_css_selector('input')
driver.find_element_by_css_selector('[id="id"]')
# 组合形式定位
driver.find_element_by_css_selector('input.classname')
driver.find_element_by_css_selector('#input > span > a')
五、鼠标动作链
有些时候,我们需要再页面上模拟一些鼠标操作,比如双击、右击、拖拽甚至按住不动等,我们可以通过导入 ActionChains 类来做到:
#导入 ActionChains 类
from selenium.webdriver import ActionChains
# 鼠标移动到 ac 位置
ac = driver.find_element_by_xpath('element')
ActionChains(driver).move_to_element(ac).perform()
# 在 ac 位置单击
ac = driver.find_element_by_xpath("elementA")
ActionChains(driver).move_to_element(ac).click(ac).perform()
# 在 ac 位置双击
ac = driver.find_element_by_xpath("elementB")
ActionChains(driver).move_to_element(ac).double_click(ac).perform()
# 在 ac 位置右击
ac = driver.find_element_by_xpath("elementC")
ActionChains(driver).move_to_element(ac).context_click(ac).perform()
# 在 ac 位置左键单击hold住
ac = driver.find_element_by_xpath('elementF')
ActionChains(driver).move_to_element(ac).click_and_hold(ac).perform()
# 将 ac1 拖拽到 ac2 位置
ac1 = driver.find_element_by_xpath('elementD')
ac2 = driver.find_element_by_xpath('elementE')
ActionChains(driver).drag_and_drop(ac1, ac2).perform()
六、填充表单
遇到<select> </select>标签的下拉框。直接点击下拉框中的选项不一定可行。Selenium专门提供了Select类来处理下拉框。 其实 WebDriver 中提供了一个叫 Select 的方法,可以帮助我们完成这些事情:
<select id="status" class="form-control valid" onchange="" name="status">
<option value=""></option>
<option value="0">未审核</option>
<option value="1">初审通过</option>
<option value="2">复审通过</option>
<option value="3">审核不通过</option>
</select>
# 导入 Select 类
from selenium.webdriver.support.ui import Select
# 找到 name 的选项卡
select = Select(driver.find_element_by_name('status'))
#三种不同方式:
select.select_by_index(1) #index 索引从 0 开始
select.select_by_value("0") #value是option标签的一个属性值,并不是显示在下拉框中的值
select.select_by_visible_text(u"未审核") #visible_text是在option标签文本的值,是显示在下拉框的值
#全部取消选择
select.deselect_all()
七、弹窗处理
当你触发了某个事件之后,页面出现了弹窗提示,处理这个提示或者获取提示信息方法如下:
alert = driver.switch_to_alert()
八、页面切换
一个浏览器肯定会有很多窗口,所以我们肯定要有方法来实现窗口的切换。切换窗口的方法如下:
使用 window_handles 方法来获取每个窗口的操作对象
for handle in driver.window_handles:
driver.switch_to_window(handle)
切换窗口的方法如下:
driver.switch_to.window("this is window name")
页面前进和后退
driver.forward() #前进
driver.back() # 后退
九、操作Cookies
获取页面每个Cookies值,用法如下
for cookie in driver.get_cookies():
print "%s=%s;" % (cookie['name'], cookie['value'])
删除Cookies,用法如下
# By name
driver.delete_cookie("BAIDUID")
# all
driver.delete_all_cookies()
十、执行 JavaScript 语句
1、隐藏百度图片
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get("https://www.baidu.com/")
# 给搜索输入框标红的javascript脚本
js = "var q=document.getElementById(\"kw\");q.style.border=\"2px solid red\";"
# 调用给搜索输入框标红js脚本
driver.execute_script(js)
#查看页面快照
driver.save_screenshot("redbaidu.png")
#js隐藏元素,将获取的图片元素隐藏
img = driver.find_element_by_xpath("//*[@id='lg']/img")
driver.execute_script('$(arguments[0]).fadeOut()',img)
# 向下滚动到页面底部
driver.execute_script("$('.scroll_top').click(function(){$('html,body').animate({scrollTop: '0px'}, 800);});")
#查看页面快照
driver.save_screenshot("nullbaidu.png")
driver.quit()
2、模拟滚动条滚动到底部
from selenium import webdriver
import time
driver = webdriver.PhantomJS()
driver.get("https://movie.douban.com/typerank?type_name=剧情&type=11&interval_id=100:90&action=")
# 向下滚动10000像素
js = "document.body.scrollTop=10000"
#js="var q=document.documentElement.scrollTop=10000"
time.sleep(3)
#查看页面快照
driver.save_screenshot("douban.png")
# 执行JS语句
driver.execute_script(js)
time.sleep(10)
#查看页面快照
driver.save_screenshot("newdouban.png")
driver.quit()
其他文章:https://blog.csdn.net/kobepaul123/article/details/128796839