Selenium模块学习笔记
头文件:
from selenium import webdriver
from selenium import webdriver
fromselenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.selectimport Select
from selenium.webdriver.common.keysimport Keys
1. 创建一个Chrome WebDriver
driver= webdriver.Chrome(executable_path="/path/to/chromedriver")
drive =webdriver.Ie(executable_path="/path/to/chromedriver")
其中executable_path为driver的绝对路径。
2.打开网页
driver.get(url)
其中url为网页的地址,例如:https://www.baidu.com/
3.查询元素
HTML定义形式如下:
<inputtype="text" name="passwd" id="passwd-id" />
查找方法:
element= driver.find_element_by_id("passwd-id")
element= driver.find_element_by_name("passwd")
element= driver.find_element_by_xpath("//input[@id='passwd-id']")
element= driver.find_element_by_class_name("s_ipt")
element= driver.find_element_by_link_text(‘新闻’)
例如:
element= driver.find_element_by_link_text(‘新闻’)
element.click()
就可以实现访问“新闻”页。
4.在文本框中输入内容
先定位到文本框,然后清楚数据,再使输入文本。
例如:
elem =driver.find_element_by_xpath(‘//*[@id="u1"]/a[1]’)
elem.clear()
elem.send_keys("sometext")
清除数据:
一般在文本框中输入数据时先要清理文本框中原来的数据。
5.定位问题
1)窗口切换
对于含有多个窗口时,应该先确定目标所在的窗口,然后切换到该窗口中。
driver.switch_to.window(‘switch_windows’)
例如:
driver= webdriver.Firefox()
driver.get("http://xueshu.baidu.com/")
# 获得百度学术搜索窗口句柄
search_windows= driver.current_window_handle
sleep(2)
driver.find_element_by_link_text('注册').click()
# 获得当前所有打开的窗口的句柄
all_handles= driver.window_handles
# 回到学术搜索窗口
forhandle in all_handles:
if handle == search_windows:
driver.switch_to.window(search_windows)
sleep(2)
print("now is searchwindow!")
driver.find_element_by_id('kw').send_keys('selenium')
driver.find_element_by_id('su').click()
sleep(2)
driver.quit()
2)frame/iframe切换
对于同一窗口定位而言,首先确定目标所在frame/iframe的位置,切换到所在的frame中。
例如:
以下为HTML代码index.html。
<htmllang="en">
<head>
<title>FrameTest</title>
</head>
<body>
<iframesrc="a.html"id="frame1"name="myframe"></iframe>
</body>
</html>
要定位其中的iframe并换,可以通过如下代码:
from selenium import webdriver
driver = webdriver.Firefox()
driver.switch_to.frame(0) # 1.用frame的index来定位,第一个是0
#driver.switch_to.frame("frame1") # 2.用id来定位
#driver.switch_to.frame("myframe") # 3.用name来定位
#driver.switch_to.frame(driver.find_element_by_tag_name("iframe")) # 4.用WebElement对象来定位
对于这种情况可以这样定位frame:
<iframesrc="myframetest.html" />
用xpath定位,传入WebElement对象:
driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@src,'myframe')]"))
6.切换下拉菜单
1)options:
element =driver.find_element_by_xpath("//select[@name='name']")
all_options= element.find_elements_by_tag_name("option")
foroption in all_options:
print("Valueis: %s" % option.get_attribute("value"))
option.click()
上面这段代码将会寻找页面第一个 “SELECT” 元素, 并且循环他的每一个OPTION元素, 打印值,然后按顺序都选中一遍。
方法二:
fromselenium.webdriver.support.ui import Select
select= Select(driver.find_element_by_name('name'))#先定位下拉菜单位置
# select= Select(driver.find_element_by_xpath('xpath'))
select.select_by_index(index)#选择下拉菜单
select.select_by_visible_text("text")
select.select_by_value(value)
取消已经选择所有的option:
select= Select(driver.find_element_by_id('id'))
select.deselect_all()
获取所有选项:
options= select.options
查找某个按钮并点击:
#Assume the button has the ID "submit" :)
driver.find_element_by_id("submit").click() #点击submit按钮
7.拖放:
element= driver.find_element_by_name("source")
target =driver.find_element_by_name("target")
fromselenium.webdriver import ActionChains
action_chains= ActionChains(driver)
action_chains.drag_and_drop(element,target).perform()
8.在不同的窗口和框架之间移动:
driver.switch_to_window("windowName")
通过查看它的javescript或者链接代码获取当前窗口的名字:
<a href="somewhere.html" target="windowName">Click here to open a new window</a>
或者使用“窗口句柄”来打开新窗口:
for handle in driver.window_handles:
driver.switch_to_window(handle)
切换不同的frame:
driver.switch_to_frame("frameName.0.child")
通过“.”操作符你还可以获得子frame,并通过下标指定任意frame。
driver.switch_to_frame("frameName.0.child")
9.访问弹出对话框
alert = driver.switch_to_alert()
注意prompt()和alert()的区别。