前言
上一篇讲了selenium的安装,不会的朋友可以去看一下:
今天讲一下selenium的具体的用法,至于基本的方法大家可以直接查看selenium API,这里只写一部分:
单个元素选取
-
find_element_by_id
-
find_element_by_name
-
find_element_by_xpath
-
find_element_by_link_text
-
find_element_by_partial_link_text
-
find_element_by_tag_name
-
find_element_by_class_name
-
find_element_by_css_selector
多个元素选取
-
find_elements_by_name
-
find_elements_by_xpath
-
find_elements_by_link_text
-
find_elements_by_partial_link_text
-
find_elements_by_tag_name
-
find_elements_by_class_name
-
find_elements_by_css_selector
Selenium具体用法
1.页面交互
下面我举例说明,打开百度浏览器,输入“selenium”,并进行搜索,打印源代码,具体代码如下:
def pageInteraction():
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
# 隐示等待,为了等待充分加载好网址
driver.implicitly_wait(5)
write = driver.find_element_by_id("kw")
write.send_keys("Selenium")
# 点击
driver.find_element_by_id('su').click()
try:
# 显示等待,其中5的解释:5秒内每隔0.5毫秒扫描1次页面变化,直到指定的元素
wait = WebDriverWait(driver, 5)
wait.until(lambda driver: driver.find_element_by_id("content_left"))
# 打印源代码
print(driver.page_source)
except TimeoutException:
print("查询元素超时")
finally:
driver.close()
2.页面元素推拽
需要导入ActionChains包,url网址来源于网络
def elementDragging():
try:
driver = webdriver.Firefox()
url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
driver.get(url)
driver.implicitly_wait(5)
# 切换到元素所在的frame
driver.switch_to.frame("iframeResult")
# 起点
start = driver.find_element_by_id("draggable")
# 终点
end = driver.find_element_by_id("droppable")
actions = ActionChains(driver)
actions.drag_and_drop(start, end)
# 执行
actions.perform()
except Exception:
print("exception")
finally:
driver.close()
3.页面切换
通过百度搜索关键词并打开一个网页,切换到新的窗口页面,再打开第三个页面
主要用到了下面三个方法:
-
current_window_handl:获得当前窗口句柄
-
window_handles:返回所有窗口的句柄到当前会话
-
switch_to_window():切换窗口函数
def pageSwitching():
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
#获取当前百度界面的窗口句柄
BD_windows = driver.current_window_handle
#打印
print(BD_windows)
# 隐示等待,为了等待充分加载好网址
driver.implicitly_wait(5)
write = driver.find_element_by_id("kw")
write.send_keys("CSDN")
# 点击
driver.find_element_by_id('su').click()
try:
#打开一个网页
driver.find_element_by_link_text(u'CSDN-专业IT技术社区').click()
# 隐示等待,为了等待充分加载好网址
driver.implicitly_wait(5)
#打印所有的窗口
print(driver.window_handles)
# 隐示等待,为了等待充分加载好网址
driver.implicitly_wait(5)
#窗口切换到第二个网页
driver.switch_to_window(driver.window_handles[1])
#点击第二个网页的"写博客"按钮
driver.find_element_by_link_text(u'写博客').click()
time.sleep(5)
except Exception:
print("exception")
finally:
driver.quit()
4.弹窗处理
alert = driver.switch_to_alert()
print(alert .text)
alert .accept()
下面是全部的源码:
# coding=utf-8
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver import ActionChains
import time
#页面交互
def pageInteraction():
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
# 隐示等待,为了等待充分加载好网址
driver.implicitly_wait(5)
write = driver.find_element_by_id("kw")
write.send_keys("Selenium")
# 点击
driver.find_element_by_id('su').click()
try:
# 显示等待,其中5的解释:5秒内每隔0.5毫秒扫描1次页面变化,直到指定的元素
wait = WebDriverWait(driver, 5)
wait.until(lambda driver: driver.find_element_by_id("content_left"))
# 打印源代码
print(driver.page_source)
except TimeoutException:
print("查询元素超时")
finally:
time.sleep(3)
driver.close()
#页面元素拖拽
def elementDragging():
try:
driver = webdriver.Firefox()
url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
driver.get(url)
driver.implicitly_wait(5)
# 切换到元素所在的frame
driver.switch_to.frame("iframeResult")
# 起点
start = driver.find_element_by_id("draggable")
# 终点
end = driver.find_element_by_id("droppable")
actions = ActionChains(driver)
actions.drag_and_drop(start, end)
# 执行
actions.perform()
except Exception:
print("exception")
finally:
driver.close()
#页面切换
def pageSwitching():
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
#获取当前百度界面的窗口句柄
BD_windows = driver.current_window_handle
#打印
print(BD_windows)
# 隐示等待,为了等待充分加载好网址
driver.implicitly_wait(5)
write = driver.find_element_by_id("kw")
write.send_keys("CSDN")
# 点击
driver.find_element_by_id('su').click()
try:
#打开一个网页
driver.find_element_by_link_text(u'CSDN-专业IT技术社区').click()
# 隐示等待,为了等待充分加载好网址
driver.implicitly_wait(5)
#打印所有的窗口
print(driver.window_handles)
# 隐示等待,为了等待充分加载好网址
driver.implicitly_wait(5)
#窗口切换到第二个网页
driver.switch_to_window(driver.window_handles[1])
#点击第二个网页的"写博客"按钮
driver.find_element_by_link_text(u'写博客').click()
time.sleep(5)
except Exception:
print("exception")
finally:
driver.quit()
if __name__ == '__main__':
pageInteraction()
#pageSwitching()
#elementDragging()
大家可以关注我的微信公众号:「秦子帅」一个有质量、有态度的公众号!
网友评论