selenium笔记(1)
一、关闭页面:
1.driver.close() 关闭当前页面
2.driver.quit() 退出整个浏览器
二、定位元素:
1.find_element_by_id: 根据id来查找某个元素。等价于:
submitTag=driver.find_element_by_id('su')
submitTag1-driver.find_element(By.ID,'su') #如果要用这种方法 必须导入 from selenium.webdriver.common.by import By
2.find_element_by-c1ass-name: 根据类名查找元素。等价于:
submitTag=driver.find_element_by_c1ass_name('su')
submitTag1=driver.find_element(By.CLASS_WAME,'SU')
3.find_element_by-name: 根据name属性的值来查找元素。等价于:
submitTag-driver.find_element_by_name('email')
submitTagl=driver.find_element(By.MAME,'email')
4.find_element_by_tag.name: 根据标签名来查找元素。等价于:
submitTag=driver.find_element_by._tag.name(‘div')
submitTagl=driver.find_element(By.TAG_MAME,’div’)
5.find_element_by_xpath: 根据xpath来获取元素。等价于:
submitTag =driver.find_element_by_xpath("//div")
submitTag1-driver.find_element(By.XPATH,//div")
6.find_element_by_css_selector: 根据css选择器选择元素。等价于:
submitTag = driver.find_element_by_css_selector("//div')
submitTag1 = driver.find_element(By.CSS_SELECTOR,"//div")
注意:
1.如果只是想要解析网页中的数据,那么推荐将网页源代码扔给lxml解析。因为lxml底层使用的是C语言,所以解析效率会更快
2.如果是想要对元素进行一些操作,比如给一个文本框输入值,或者是点击某个按钮,那么久必须使用selenium给我们提供的查找元素的方法。
三、常见表单元素 :
1.input type='text/password/email/number'
2.button input[type='submit']
3.checkbox input[type='checkbox']
4.select: 下拉列表
操作表单元素:
1.操作输入框:分为两步。第一步:找到这个元素。第二步:使用send_keys(value),将数据填充进去。示例代码如下:
inputTag = driver.find_element_by_id("kw")
inputTag.send_keys('python")
使用clear方法可以清除输入框中的内容。示例代码如下:
inputTag.clear()
2.操作checkbox:因为要选中checkbox标签,在网页中是通过鼠标点击的。因此想要选中checkbox标签,那么先选中这个标签,然后执行click事件。示例代码如下:
rereaberTag = adriver.find_element_by_name("resemberMe")
rereaberTag.click() #执行鼠标点击 (选择) 取消选择在调用一次就行
3.选择select:select元素不能直接点击。因为点击后还需要选中元素。这时候selenium就专门为select标签提供了一个类selenium.webdriver.support.ui.Select。将获取到的元素当成参数传到这个类中,创建这个对象。以后就可以使用这个对象进行选择了。示例代码如下:
from selenium.webdriver.support.ui import Select
#选中这个标签,然后使用Select创建对象
selectTag=Select(driver.find_element_by_name("jumpHenu"))
#根据索引选择
selectTag.select_by_index(1)
#根据值选择
selectTag.select_by_value("http://www.95yueba.com")
#根据可视的文木选择
selectTag.select_by_visible_text("95秀客户端")
#取简选中所有选项
selectTag.deselect_all()
四、行为链
有时候在页面中的操作可能要有很多步,那么这时候可以使用鼠标行为链类 ActionChains来完成。比如现在要将鼠标移动到某个元素上并执行点击事件。那么示例代码如下:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains #导入行为链
driver_path = r"D:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get("https://www.baidu.com/")
inputTag = driver.find_element_by_id('kw') #选中输入框标签
submitBtn = driver.find_element_by_id('su') #点击按钮 (百度一下按钮)
actions = ActionChains(driver) #创建一个行为链对象
actions.move_to_element(inputTag) #鼠标移到输入框
actions.send_keys_to_element(inputTag,'python') #输入键值
actions.move_to_element(submitBtn) #点击提交
actions.perform() #執行 行为链
#更多鼠标相关操作:
click_and_hold(element) 点击但不松开鼠标
context_click(element) 右击
double_click(element) 双击
五、cookie操作:
# 1.获取所有的 cookie:
for cookie in driver.get_cookies():
print(cookie)
# 2.根据cookie的key获取value:
value = driver.get(cookie(key)
# 3.删除所有的cookie:
driver.delete_all_cookies())
# 4.删除某个 cookie:
driver.delete_cookie(key)
六、页面等待:
现在的网而越来越多采用了Ajax技术,这样程序便不能确定何时某个元素完全加载出来了。如果实际页面等待时间过长导致某个dom元素还没出来,但是你的代码直接使用了这个WebElement,那么就会抛出NullPointer的异常。为了解决这个问题。所以Selenium提供了两种等待方式:一种是隐式等待、一种是显式等待。
1.隐式等待(获取一个不存在的元素时,给定一个确切的时间(指定时间)):调用driver.implicitly_wait。那么在获取不可用的元素之前,会先等待10秒中的时间。示例代码如下:
driver = webdriver.Chrome(executable_pathedriver_path)
driver.implicitly_wait(16)
#请求网页
driver.get("https://www.douban.com/")
2.显示等待:显示等待是表明某个条件成立后才执行获取元素的操作。也可以在等待的时候指定一个最大的时间,如果超过这个时间那么就抛出一个异常。显示等待应该使用selenium.webdriver.support.excepted.conditions 期望的条件和selenium.webdriver.support.ui.webDriverwait来配合完成。示例代码如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverwait
from selenium.webdriver.support import expected_conditions as EC
driver_path = r"D:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get("http://somedomain/url_that_delays_loading")
try:
element=WebDriverWait(driver,10).until( #最多等待10秒 知道until中的元素By.ID出现
EC.presence_of_element_located((By.ID,"myDynamicElement"))
)
finally:
driver. quit()