selenium工具之获取页面元素的其他信息
已知元素定位、获取元素文本
说明:有时需要获取元素的文本值,做断言比较,则可以使用元素的text属性
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com")
element = driver.find_element_by_xpath("//a[@href='http://news.baidu.com']")
text = element.text
print(text)
driver.quit() # 打印结果:新闻
已知元素定位、获取元素其他属性
有时元素没有text属性(HTML标签之间的文本值);
而是通过value展示文本值的(通过HTML的value属性名实现文本值);
那么可以获取其它属性方法: get_attribute("属性") ,这里的属性参数可以是 class、name、value等元素包括的任意属性名。
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com")
element = driver.find_element_by_id("su")
text = element.get_attribute("value")
print(text)
driver.quit() # 打印结果:百度一下
已知元素定位、获取元素标签名
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com")
element = driver.find_element_by_id("su")
print(element.tag_name)
driver.quit() # 打印结果:input
获取浏览器名字
方法:name
实例:drvier.name
获取浏览器当前页面title
方法:driver.title
实例:driver.title
获取整个页面元素
print(browser.page_source)
获取当前页面的url
方法:current_url
实例:driver.current_url
说明:在python自动化测试中,获取页面地址使用 current_url() 获取当前页面地址;
但在原页面上点击某个按钮打开了一个新页面,如果想要获取新页面的url地址就不能只是使用 current_url() 方法,因为此时该方法获取到的地址还是原页面地址。
例如:
from selenium import webdriver import time as t driver=webdriver.Chrome() driver.maximize_window() driver.implicitly_wait(30) driver.get('http:/www.baidu.com') # 跳转到新页面 driver.find_element_by_link_text('新闻').click() t.sleep(3) print('当前浏览地址为:.{0}'.format(driver.current_url)) # 当前浏览器地址为:www.baidu.com driver.quit()
添加定位页面代码之后再使用 current_url() 获取新页面的地址即可。
from selenium import webdriver import time as t driver=webdriver.Chrome() driver.maximize_window() driver.implicitly_wait(30) driver.get('http:/www.baidu.com') # 跳转到新页面 driver.find_element_by_link_text('新闻').click() #切换当前页面标签 driver.switch_to.window(driver.window_handles[1]) t.sleep(3) print('当前浏览地址为:.{0}'.format(driver.current_url)) # 当前浏览器地址为:http://news.baidu.com driver.quit()
已知元素定位、获取元素坐标位置
driver = webdriver.Firefox() element = driver.find_element_by_xpath("//someXpath") location = element.location print(location) # {'y': 202, 'x': 165}
已知元素定位、获取元素大小
driver = webdriver.Firefox() element = driver.find_element_by_xpath("//someXpath") location = element.location size = element.size print(size) # {'width': 77, 'height': 22}
表单的提交
方法:submit 解释:查找到表单(form)直接调用submit即可 实例:driver.find_element_by_id("form1").submit()
已知元素定位、获取元素CSS的属性值
方法:value_of_css_property(css_name) 实例:driver.find_element_by_css_selector("input.btn").value_of_css_property("input.btn")
已知元素定位、获取元素的tagName(元素标签名)
方法:tag_name 实例:driver.find_element_by_id("iptUsername").tag_name 返回值:定位的元素的标签名 如p div标签
删除浏览器所有的cookies
方法:delete_all_cookies()
实例:driver.delete_all_cookies()
删除浏览器指定的cookies
方法:delete_cookie(name) 实例:deriver.delete_cookie("my_cookie_name")
返回当前会话中的cookies
方法:get_cookies()
实例:driver.get_cookies()
根据cookie name 查找映射Value值
方法:driver.get_cookie(cookie_name) 实例:driver.get_cookie("NET_SessionId")
关闭当前浏览器页面(浏览器驱动并未杀死)
方法:close() 指当前页面
实例:driver.close()
关闭浏览器并且退出驱动程序(杀死浏览器驱动)
方法:quit()
实例:driver.quit()
浏览器回退操作
方法:back()
实例:driver.back()
清空输入框操作
方法:clear()
实例:实例:driver.find_element_by_id("iptUsername").clear()
浏览器窗口最大化
方法:maximize_window()
实例:driver.maximize_window()
浏览器设置窗口大小
browser.set_window_size(300,300)
获取当前浏览器窗口的坐标
方法:get_window_position()
实例:driver.get_window_position()
获取当前浏览器窗口的长和宽(获取浏览器窗口大小)
方法:get_window_size()
实例:driver.get_window_size()
切换浏览器窗口
# 切换不同的tab页 方法:driver.switch_to.window(window_name) # 备注:从A页跳转到B页,句柄已经切换过去,但是焦点没有切过去,所以需要switch_to.window,把焦点也切过去,才可以在当前页进行操作。 # 切换是思路,获取所有的句柄,因为返回是一个list,而且要切换的对象都是最后一个,可以使用[-1]直接切过去 # 例如: driver.switch_to.window(driver.window_handles[-1])
返回最外层表单
方法: driver.switch_to_default_content() # 旧方法 driver.switch_to.default_content() # 新方法
切换至指定frame框架中
方法:driver.switch_to.frame('xxx') 实例:
driver.switch_to.frame('frame_name') driver.switch_to.frame(index) driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])
鼠标焦点切换到浏览器中的弹窗
方法:driver.switch_to_alert()
实例:driver.switch_to_alert()
浏览器前进
方法:
driver.forward()
浏览器后退
browser.back()
刷新浏览器页面
方法:driver.refresh()
浏览器警告框处理
实例1
"""警告框处理"""
# 获取警告框文本信息 AlertText = driver.switch_to.alert.text
print(AlertText)
# 模拟点击确定操作 driver.switch_to.alert.accept()
# 模拟点击取消操作 driver.switch_to.alert.dismiss()
实例2
try: tt = browser.switch_to_alert() print("打印警告框提示...") except Exception as e: print("faild")
success_text = tt.text print(success_text) tt.accept()
去除页面元素的只读属性(readonly)
"""去除只读属性""" #实例12306,日期选择
# 移除readonly属性 js_readonly = 'document.getElementById("train_date").removeAttribute("readonly");'
driver.execute_script(js_readonly) # 清空 开始日期 # driver.find_element_by_id("train_date").clear() # 输入新的日期 # driver.find_element_by_id("train_date").send_keys("2020-05-01")
页面input框利用send_keys上传图片
#F:\dd.jpg 为本地图片路径 driver.find_element_by_id("file_select").send_keys("F:\dd.jpg")
复选框操作
Len()方法可以用来计算元素的个数
click()方法是对某个元素进行勾选;
pop().click(),其实是对某个元素取消勾选
如果只想勾选一组元素中的某一个该如何操作呢? pop()或pop(-1): 默认获取一组元素中的最后一个。 pop(0): 默认获取一组元素中的第一个。 pop(1): 默认获取一组元素中的第二个。
这样就可以操作这一组元素中的任意一个元素了,只需数一数需操作的元素是这一组中的第几个。
滚动条操作
"""浏览器滚动条并没有提供相应的操作方法。在这种情况下,就可以借助JavaScript来控制浏览器的滚动条。 WebDriver提供了execute_script()方法来执行JavaScript代码。"""
js="window.scrollTo(0,2500);" #0为起始,2500为终点 driver.execute_script(js) js = 'window.scrollTo(0,document.body.scrollHeight)' # 滚动到浏览器底部 driver.execute_script(js) time.sleep(2) js = 'window.scrollTo(0,document.body.scrollTop=0)' # 滚动到浏览器顶部 driver.execute_script(js)
元素聚焦
"""虽然用上面的方法可以解决拖动滚动条的位置问题,但是有时候无法确定我需要操作的元素在什么位置,有可能每次打开的页面不一样,元素所在的位置也不一样,怎么办呢?这个时候我们可以先让页面直接跳到元素出现的位置,然后就可以操作了。同样需要借助JS去实现。""" target = driver.find_element_by_xxxx() driver.execute_script("arguments[0].scrollIntoView();", target)
设置网络
print(browser.set_network_conditions( offline=False, latency=5, # additional latency (ms) download_throughput=500 * 1024, # maximal throughput upload_throughput=500 * 1024) # maximal throughput) )
指定浏览器驱动位置(或者将驱动设置为环境变量)
from selenium import webdriver
browser = webdriver.Chrome(executable_path="/Users/xinxi/PycharmProjects/selenium_demo/webdriver/chromedriver_mac")
# executable_path来指定chromedirver路径 browser.get('https://www.baidu.com')
保存截图(截取当前浏览器页面页面)
browser.save_screenshot("/Users/xinxi/PycharmProjects/selenium_demo/screen_folder/截图.png")
图片流截图(截取当前浏览器页面页面)
sc_str = browser.get_screenshot_as_png()
sc_path = "/Users/xinxi/PycharmProjects/selenium_demo/screen_folder/截图.png" with open(sc_path,"w") as f: f.write(sc_str)
base_64截图(截取当前浏览器页面页面)
sc_str = browser.get_screenshot_as_base64()
html_tmp = """ <html> <body> <h1>这是一个截图</h1> <img src="data:image/png;base64,{}"/> </body> </html> """.format(sc_str)
html_path = "/Users/xinxi/PycharmProjects/selenium_demo/screen_folder/截图.html" with open(html_path,"w") as f: f.write(html_tmp)
效果如下:
去期待陌生,去拥抱惊喜。