selenium 笔记
pip show selenium 查看selenium的版本
--升级selenium
python -m pip install --upgrade selenium
----Xpath
//*[@id="kw"] 相对路径
//a[text()="新闻"]
-------------------------------------------
# import time
# from selenium import webdriver
# driver = webdriver.Chrome()
# driver.get('http://www.baidu.com')
# # driver.find_element('id','kw').send_keys('你安全吗?')
# #driver.find_element('id','kw').send_keys('你安全吗?')
# time.sleep(2)
# driver.find_element("xpath", "//*[@id='form']/span[1]/span[1]").click()
# time.sleep(1)
# driver.find_element("xpath", "//*[@id='form']/div/div[2]/div[2]/input").send_keys(r'D:\222.jpg')
# time.sleep(31)
# driver.quit()
---------------------------------------
# import time
# from selenium import webdriver
# from selenium.webdriver.common.by import By
# driver = webdriver.Chrome()
# #隐式等待
# driver.implicitly_wait(5)
# driver.get('https://image.baidu.com/')
# time.sleep(2)
# driver.find_element(By.XPATH, "//*[@id='sttb']/img[1]").click()
# time.sleep(1)
# #文件上传
# driver.find_element(By.ID, "stfile").send_keys(r'D:\222.jpg')
# time.sleep(5)
# driver.quit()
------------------------------------------------------------
#鼠标悬停:基于ActionChains类实现悬停操作,运行过程中不要乱动鼠标
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=options)
driver = webdriver.Chrome()
#隐式等待
driver.implicitly_wait(5)
#窗体最大化,页不会调用
driver.maximize_window()
#设置窗体尺寸,一般不会调用
# driver.set_window_size(1500,800)
driver.get('https://www.baidu.com/')
el = driver.find_element(By.ID,'s-usersetting-top')
ActionChains(driver).move_to_element(el).perform()
time.sleep(4)
driver.find_element(By.LINK_TEXT,'高级搜索').click()
time.sleep(3)
----------------------------------------
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
def main():
b = webdriver.Chrome()
b.get('https://www.baidu.com')
# b.find_element(id='kw').send_keys('nihao')
# b.find_element("id", "kw").send_keys('selenium')
b.find_element(By.ID, "kw").send_keys('selenium')
b.find_element('id','su').click()
time.sleep(5)
b.quit()
if __name__ == '__main__':
main()
--------------------------------------------------------
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=options)
driver = webdriver.Chrome()
#隐式等待
driver.implicitly_wait(5)
#窗体最大化,页不会调用
# driver.maximize_window()
#设置窗体尺寸,一般不会调用
# driver.set_window_size(1500,800)
driver.get('https://www.baidu.com/')
el = driver.find_element(By.ID,'s-usersetting-top')
ActionChains(driver).move_to_element(el).perform()
time.sleep(4)
driver.find_element(By.LINK_TEXT,'高级搜索').click()
# time.sleep(10)
#下拉列表框,通过Select类来实现元素的选择和值的选择。这个方法只限于select标签可以使用
#一般遇到div或者input或者是span标签类别的下拉列表框,只能通过点击的方式来处理
driver.find_element(By.XPATH,'//*[@id="adv-setting-ft"]/div/div[1]/span').click()
driver.find_element(By.XPATH,'//*[@id="adv-setting-ft"]/div/div[2]/div[2]/p[5]').click()
time.sleep(4)
#单复选框通过click操作即可
#关闭浏览器,释放资源
driver.quit()
#关闭当前标签页
# driver.close()
-----------------------------------------
'''
句柄切换, iframe
selenium永远默认聚焦在第一个页面
不同标签页在selenium体系中,认定为不同的句柄,如果要切换页面,本质上就是切换句柄
'''
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=options)
driver = webdriver.Chrome()
#隐式等待
driver.implicitly_wait(5)
#窗体最大化,页不会调用
# driver.maximize_window()
#设置窗体尺寸,一般不会调用
# driver.set_window_size(1500,800)
driver.get('https://www.baidu.com/')
driver.find_element(By.ID,'kw').send_keys('nihao')
driver.find_element(By.ID,'su').click()
driver.find_element(By.XPATH,'//*[@id="1"]/div/div/h3/a').click()
print(driver.title)
time.sleep(5)
#句柄切换,切换原则,永远记住最多保留两个标签,特殊情况保留不超过三个
handles = driver.window_handles
#业务场景决定是否关闭当前标签页
driver.close()
driver.switch_to.window(handles[1])
#iframe:定位不到时,检查下是否有iframe
driver.switch_to.frame(id/name/webelement)
#iframe中操作完成之后需要切换回默认的窗体
driver.switch_to.default_content()
--------------------------------
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import locate_with
options = webdriver.ChromeOptions()
#页面加载策略:normal/eager/none
options.page_load_strategy = 'normal'
#传统元素定位都是基于八大法则进行定位
driver = webdriver.Chrome(options=options)
el = driver.find_element('id','kw')
#相对定位器
driver.find_element(locate_with(By.TAG_NAME,'input').to_right_of(el)).click()
#创建新的标签页和浏览器:都会在生成新的之后,直接将句柄切换过去
driver.switch_to.new_window('window') #创建浏览器
driver.switch_to.new_window('tab') #创建tab标签
----------------------------------------------
'''
JS执行器可以实现部分selenium实现不了的操作
document常用的操作行为:
1.定位元素
2.通过Document来实现元素的属性修改,或者添加和删除
设置text文本 innerHTML
setAttribute 设置元素的属性,如果不存在则添加属性
removeAttribute 移除指定属性
scrollTo 滚动横向与纵向滚动条
WebElement.scrollIntoView() 基于指定元素来进行滚动条的滚动操作
'''
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
# js语句的执行
js = "document.getElementById('kw').removeAttribute('class')"
driver.execute_script(js)
js = "return document.getElementById('kw').innerHTML='修改文本'"
value = driver.execute_script(js)
print(value)
js = "document.getElementById('kw').setAttribute('class')"
driver.execute_script(js)
js = "document.getElementById('su').scrollIntoView()"
driver.execute_script(js)
# selenium + Document 对象实现元素的操作
el = driver.find_element(By.XPATH,'//*[@id="kw"]')
name1 = el.get_attribute('name')
print(name1)
#arguments[0] 相当于一个占位符
js = "arguments[0].setAttribute('name','改的新名字')"
driver.execute_script(js,el)
name2 = el.get_attribute('name')
print(name2)
浙公网安备 33010602011771号