python selenium(常用關鍵字)


 1、文本按鈕操作相關

  • send_keys()輸入文本
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("https://www.baidu.com/")
time.sleep(2)
dr.find_element_by_id("kw").send_keys("selenium")
  • clear()清除文本
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("https://www.baidu.com/")
time.sleep(1)
dr.find_element_by_id("kw").send_keys("selenium")
time.sleep(2)
dr.find_element_by_id("kw").clear()
  • click()點擊按鈕
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("https://www.baidu.com/")
time.sleep(1)
dr.find_element_by_id("kw").send_keys("selenium")
time.sleep(1)
dr.find_element_by_id("su").click()
  • submit()類似輸入文本后回車
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("https://www.baidu.com/")
time.sleep(1)
dr.find_element_by_id("kw").send_keys("selenium")
time.sleep(1)
dr.find_element_by_id("kw").submit()
  • size 返回元素的尺寸
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("https://www.baidu.com/")
time.sleep(1)
print (dr.find_element_by_id("su").size)
  • text 獲取文本
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
time.sleep(1)
print (dr.find_element_by_id("ls_fastloginfield_ctrl").text)

 

2、常見的 webdriver 方法

  • get_window_size()  獲取瀏覽器窗口大小
  • set_window_size(480,800)       設置瀏覽器窗口大小
  • maximize_window()  瀏覽器窗口最大化
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("https://www.baidu.com/")
time.sleep(1)
print (dr.get_window_size())
time.sleep(2)
dr.maximize_window()
time.sleep(2)
dr.set_window_size(800,500)
  • get_attribute()獲取元素屬性值
product_name = driver.find_element_by_id('currentItem').get_attribute("title")
if name == product_name:
    print ("ok!")
else:
    raise AssertionError
  • back()向后
  • forward()向前
  • refresh()刷新
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("https://www.baidu.com/")
time.sleep(1)
dr.find_element_by_link_text("hao123").click()
time.sleep(2)
dr.back()
time.sleep(2)
dr.forward()
time.sleep(2)
dr.refresh()
  • close()關閉當前選項卡頁面
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
time.sleep(1)
dr.find_element_by_link_text("交友").click()
time.sleep(2)
dr.close()  #關閉當前句柄窗口
from selenium import webdriver
from time import sleep
dr = webdriver.Chrome()
#打開第一個網頁"百度"
dr.get("https://www.baidu.com")
sleep(2)
#打開第二個網頁"京東"
js = 'window.open("https://www.jd.com")'
dr.execute_script(js)
sleep(2)
#關閉當前句柄的窗口
dr.close()
  • quit()關閉所有選項卡頁面
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
time.sleep(1)
dr.find_element_by_link_text("交友").click()
time.sleep(2)
dr.quit()
from selenium import webdriver
from time import sleep
dr = webdriver.Chrome()
#打開第一個網頁"百度"
dr.get("https://www.baidu.com")
sleep(2)
#打開第二個網頁"京東"
js = 'window.open("https://www.jd.com")'
dr.execute_script(js)
sleep(2)
#關閉當前瀏覽器
dr.quit()
  • 窗口滾動操作
    • js = "window.scrollTo(300,200)"   #300表示左邊距,200表示上邊距
    • js = "document.documentElement.scrollTop=200" #向下滑動200px
    • js = "document.documentElement.scrollLeft=300" #向右滑動300px
    • execute_script(js)
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("https://www.baidu.com/")
time.sleep(1)
dr.set_window_size(800,500)
time.sleep(2)
js = "window.scrollTo(300,200)"   #300表示左邊距,200表示上邊距
dr.execute_script(js)
from selenium import webdriver
from time import sleep
dr = webdriver.Chrome()

dr.get("https://www.cnblogs.com/ZhengYing0813")
# print(dr.get_window_size())
dr.set_window_size(500,500)
sleep(1)
# js = "document.documentElement.scrollTop=200"     #向下滑動200px
# js = "document.documentElement.scrollLeft=300"    #向右滑動300px
# dr.execute_script(js)
n = 0
while 1000 > n:
    n += 100
    js = "document.documentElement.scrollTop=" + str(n)
    dr.execute_script(js)
    sleep(2)

sleep(3)
dr.quit()
  • title 獲取頁面 title
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
time.sleep(1)
print ("當前title:" + dr.title)
  • current_window_handle  當前頁面的句柄
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
time.sleep(1)
print ("當前句柄:" + dr.current_window_handle)
dr.find_element_by_link_text("交友").click()
print ("當前句柄:" + dr.current_window_handle)
  • window_handles  當前所有的句柄,返回句柄列表
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
time.sleep(1)
print ("當前句柄:" + dr.current_window_handle)
dr.find_element_by_link_text("交友").click()
print ("所有句柄:" + dr.window_handles)
  • switch_to_window()   切換窗口(一般通過句柄切換)
from selenium import webdriver
import time
dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
time.sleep(1)
print ("首頁title:" + dr.title)
dr.find_element_by_link_text("交友").click()
dr.switch_to_window(dr.window_handles[1])
print ("此時title:" + dr.title)

 

3、鼠標相關

  • context_click()右擊
  • double_click()雙擊
  • drag_and_drop()拖拽
  • drag_and_drop_by_offset()拖拽
  • move_to_element()鼠標懸停
  • perform()執行
"""
鼠標懸浮
"""
# 第一種方法(二次定位)
from selenium import webdriver
from time import sleep
dr = webdriver.Chrome()
dr.maximize_window()
dr.get("https://www.baidu.com")
sleep(2)
dr.find_element_by_link_text("設置").click()
dr.find_element_by_link_text("搜索設置").click()
sleep(2)
dr.quit()

# 第二種方法
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains    #導入鼠標操作模塊
import time     #導入時間模塊
dr = webdriver.Chrome()     #webdriver類實例化
dr.get("https://www.baidu.com")
time.sleep(1)
element = dr.find_element_by_link_text("設置")    #定位到鼠標要懸浮的元素
ActionChains(dr).move_to_element(element).perform()
#鼠標操作類實例化,傳driver驅動     將鼠標懸浮到元素上       執行懸浮操作
time.sleep(1)
dr.find_element_by_link_text("高級搜索").click()    #點擊設置按鈕下的元素
time.sleep(3)
dr.close() 
"""
drag_and_drop 拖拽
"""
sourse=driver.find_element_by_id('xx')    #定位元素要移動的目標位置
target=driver.find_element_by_id('yy')    #執行元素的拖放操作
ActionChains(driver).drag_and_drop(sourse,target).perform()
"""
drag_and_drop_by_offset 拖拽,處理滑塊驗證
"""
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
dr = webdriver.Chrome()
dr.get("https://shopcs.yunyoute.com/login")
dr.maximize_window()
dr.implicitly_wait(10)
time.sleep(2)
drag1 = dr.find_element_by_class_name("evenBox")    # 定位到滑塊
ActionChains(dr).drag_and_drop_by_offset(drag1,1572,708).perform()    # 拖拽到指定坐標 (1572,708)
"""
鼠標右擊操作
"""
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
dr = webdriver.Chrome()
dr.get("https://shopcs.yunyoute.com/login")
dr.maximize_window()
dr.implicitly_wait(10)
time.sleep(2)
inp = dr.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/div/div/div/div/div[3]/div[1]/input[2]')
ActionChains(dr).context_click(inp).perform()

 

4、selenium 中三種等待方式

(1)線程等待(強制等待):time.sleep(s)

import time
from selenium import webdriver

dr = webdriver.Chrome()
dr.get("https://www.baidu.com")
dr.find_element_by_css_selector('[id=kw]').send_keys("selenium")
time.sleep(2)
dr.quit()

(2)隱式等待:dr.implicitly_wait(s)  等待頁面所以的元素加載完成,則會自動進行下一步操做,如果等待時間超過設置的時間則會報錯

from selenium import webdriver

dr = webdriver.Chrome()
dr.implicitly_wait(10)
dr.get("https://www.baidu.com")
dr.find_element_by_css_selector('[id=kw]').send_keys("selenium")
dr.quit()

(3)顯式等待:等待頁面特定的某個元素加載后,才會進行下一步操作,如果在設定的時間內沒有找到則會報錯

from selenium import webdriver
# 兩種導入WebDriverWait方式
# from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support.ui import WebDriverWait
#通過 as 關鍵字將 expected_conditions 重命名為EC
from selenium.webdriver.support import expected_conditions as EC
#導入By模塊
from selenium.webdriver.common.by import By

dr = webdriver.Chrome()
dr.get("https://www.baidu.com")
#presence_of_element_located 必須以元組的形式傳入,所以使用到By方法進行定位
try:
    element = WebDriverWait(driver=dr,timeout=10,poll_frequency=0.5).until(EC.presence_of_element_located((By.ID,"kw")))
    element.send_keys("selenium")
finally:
    dr.quit()
  • WebDriverWait(driver,timeout,poll_frequency,ignored_exceptions)
    • driver:瀏覽器驅動
    • timeout:最長超時時間,默認以秒為單位
    • poll_frequency:檢測的間隔(步長)時間,默認為 0.5S
    • ignored_exceptions:超時后的異常信息,默認情況下拋 NoSuchElementException 異常
  • WebDriverWait() 一般由 until() 或 until_not() 方法配合使用
until(method, message=' ')      #調用該方法提供的驅動程序作為一個參數,直到返回值為True
until_not(method, message=' ')      #調用該方法提供的驅動程序作為一個參數,直到返回值為False
  • EC 預置條件模塊具有很多類型的判斷:
    • presence_of_element_located                  判斷當前元素是否存在
    • presence_of_all_elements_located             判斷一組元素是否存在
    • text_to_be_present_in_element_value       判斷元素值是否有xx文本信息
    • presence_of_all_elements_located             判斷一組元素是否存在

 

5、單 / 復選框相關

dr.get("http://127.0.0.1:8848/html/checkbox.html")
list=dr.find_elements_by_xpath("//*[@class='tbmu']/td/label")
for i in list:
    i.click()#勾選全部標簽

 

6、下拉框處理

(1)select 模塊定位

  • Select 提供了三種選擇方法:    
    • select_by_index(index) ——通過選項的順序,第一個為 0 
    • select_by_value(value) ——通過 value 屬性 
    • select_by_visible_text(text) ——通過選項可見文本
from selenium import webdriver
from selenium.webdriver.support.select import Select
import time
dr = webdriver.Chrome()
dr.get("http://127.0.0.1:8848/project/html/Drop_down_box.html")
time.sleep(1)
element = dr.find_element_by_id("birthprovince")
Select(element).select_by_index(5)
Select(element).select_by_value("山西省")
Select(element).select_by_visible_text("河北省"
  •  Select 提供了四種方法取消選擇:(只能取消選擇多選選項)
    • deselect_by_index(index) 
    • deselect_by_value(value) 
    • deselect_by_visible_text(text) 
    • deselect_all()

(2)二次定位(基本思路,先定位 select 框,再定位 select 里的選項)

from selenium import webdriver
from selenium.webdriver.support.select import Select
import time
dr = webdriver.Chrome()
dr.get("http://127.0.0.1:8848/project/html/Drop_down_box.html")
time.sleep(1)
#兩次定位
element = dr.find_element_by_id("birthprovince")
element.find_element_by_xpath('//*[@id="birthprovince"]/option[5]').click()

 

7、frame 處理

(1)switch_to.frame()選擇一個 frame  --->  只能用 id 或 name 定位 frame

from selenium import webdriver
import time

dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
dr.maximize_window()
dr.find_element_by_id("ls_username").send_keys("xfs")
dr.find_element_by_id("ls_password").send_keys("123456")
dr.find_element_by_css_selector('[type="submit"]').click()
time.sleep(2)
dr.find_element_by_link_text("學員作業專區").click()
dr.find_element_by_xpath('//*[@id="newspecial"]/img').click()    #發帖
time.sleep(2)
dr.find_element_by_id("subject").send_keys("test")
time.sleep(1)
dr.switch_to_frame("e_iframe")  #直接定位frame框架,只能通過id/name定位
time.sleep(1)
dr.find_element_by_xpath('/html/body').send_keys(u"測試一下")

(2)假如 iframe 沒有可定位的 id 或 name 那么可以通過 xpath 先定位到 iframe,再將對象傳給 switch_to.frame():如下

from selenium import webdriver
import time

dr = webdriver.Chrome()
dr.get("http://192.168.0.161:8081/discuz/forum.php")
dr.maximize_window()
dr.find_element_by_id("ls_username").send_keys("zhengying")
dr.find_element_by_id("ls_password").send_keys("zhengying123456")
dr.find_element_by_css_selector('[type="submit"]').click()
time.sleep(2)
dr.find_element_by_link_text("學員作業專區").click()
dr.find_element_by_xpath('//*[@id="newspecial"]/img').click()
time.sleep(2)
dr.find_element_by_id("subject").send_keys("test")
time.sleep(1)
frame = dr.find_element_by_css_selector("#e_body > div > iframe")      #先定位到frame
dr.switch_to.frame(frame)       #再將frame的對象傳進去
time.sleep(1)
dr.find_element_by_xpath('/html/body').send_keys("dmlafjiuwnkdsncqwfcwnoqncsdknfwcnsdkfn")

(3)dr.switch_to.default_content()  取消選擇一個 frame(跳回最外層的頁面)

         dr.switch_to.parent_frame()  取消選擇一個 frame(跳出當前 frame)

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

dr.get("http://192.168.0.161:8081/discuz/forum.php")
dr.maximize_window()
dr.find_element_by_id("ls_username").send_keys("zhengying")
dr.find_element_by_id("ls_password").send_keys("zhengying123456")
dr.find_element_by_css_selector('[type="submit"]').click()
time.sleep(2)
dr.find_element_by_link_text("學員作業專區").click()
dr.find_element_by_xpath('//*[@id="newspecial"]/img').click()
time.sleep(2)
dr.find_element_by_id("subject").send_keys("test")
time.sleep(1)
dr.switch_to_frame("e_iframe")  #通過frame的id進行傳參
dr.find_element_by_xpath('/html/body').send_keys(u"測試一下")
time.sleep(2)
dr.switch_to_default_content()
time.sleep(2)
dr.find_element_by_link_text("學員作業專區").click()

 

8、彈窗相關

  • switch_to.alert.accept()   #確定
  • switch_to.alert.dismiss()   #取消
  • switch_to.alert.text   #獲取彈框信息
from selenium import webdriver
import time

dr = webdriver.Chrome()
dr.get("http://127.0.0.1:8848/project/html/Alert.html")
time.sleep(2)
dr.find_element_by_class_name("xxx").click()
time.sleep(2)
# dr.switch_to_alert().accept()     #確定
print (dr.switch_to_alert().text)     #捕獲彈窗內容
time.sleep(1)
dr.switch_to_alert().dismiss()      #取消

 

9、數據庫操作

  • dos窗口下安裝pymysl -->  pip install pymysql
  • 游標概念:SQL 的游標是一種臨時的數據庫對象,游標的一個常見用途就是保存查詢結果,以便后續調用或者使用(游標是系統為用戶開設的一個數據緩沖區,存放 SQL 語句的執行結果)
  • 游標 cursor():該方法會幫我們獲取操作游標這時游標會為我們提供方法:
    • 執行腳本命令
    • 接受返回值
  • db=pymysql.connect("IP 地址","用戶名","密碼","數據庫名",charset='utf8')
  • cursor=db.cursor() 獲取游標
  • fetchone()   提取第一行數據
  • fetchall()   提取所有數據
  • fetchmany(size)  根據 size 值提取具體行數
  • 注意:當游標cursor中的某條數據被取出后,當前查詢結果中則不能再次提取該條數據
import pymysql

def con(ip,user,password,database,port,sql):
    db = pymysql.connect(ip,user,password,database,int(port),charset='utf8')
    cursor = db.cursor()
    cursor.execute(sql)
    print (cursor.fetchone())
    print (cursor.fetchall())
    print (cursor.fetchmany(5))
    db.close()

con("192.168.1.222","root","123456","study",3306,"select * from user;")


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM