python自動化實現(xiàn)的簡單使用
環(huán)境配置
pycharm
環(huán)境配置- 下載
chrome drives.exe
,版本選擇要和chrome瀏覽器版本相近放在python目錄script
下 - 在pycharm輸入以下代碼使python配合seninum實現(xiàn)自動化輸入
定位
1.Link_text定位超鏈接
from selenium import webdriver #創(chuàng)建瀏覽器 driver = webdriver.Chrome() driver.get("https://www.baidu.com") #根據(jù)linktext方法定位超鏈接屬性界面字樣"新聞",看是否打開新聞超鏈接(注意link_text值用單引號) #driver.find_element_by_link_text('新聞').click() #根據(jù)partial_linktext方法定位超鏈接屬性界面模糊字樣"地",看是否打開地圖超鏈接 driver.find_element_by_partial_link_text('地').click() import time # 沉睡的目的是讓程序進行地慢一點方便觀看,有時候是等待元素渲染完成 time.sleep(5) #關(guān)閉瀏覽器 #driver.quit()
2.混合元素定位
a.屬性定位方式
#查找所有id=root的元素 driver.find_element_by_xpath('//*[@id="root"]
b.查找所有id值包含"con"的所有元素
注:contains()是個函數(shù) //*[contains(@id,"con")]
c.查找所有包含id=footerLayer 且 包含class=relativeFooterLayer的所有元素
//*[@id="footerLayer" and @class="relativeFooterLayer" ]
d. 查找所有包含id=footerLayer 或者 包含class=relativeFooterLayer的所有元素
/*[@id="footerLayer" or @class="relativeFooterLayer" ]
f.查找 class以mod開頭的div屬性
//div[starts-with(@class,'mod')]
3.Xpath定位(通常)
1.絕對定位
從頂層一層一層往下找對應(yīng)的元素
缺點:頁面改動,絕對地址就會發(fā)生改變,將會定位錯誤
from selenium import webdriver import time #創(chuàng)建瀏覽器 driver = webdriver.Chrome() driver.get("https://www.ctrip.com/") #使用xpath方法絕對定位點擊攜程的攻略.景點功能 driver.find_element_by_xpath('/html/body/div/div[@id="leftSideNavLayer"]/div/div/div[@style]/div/div/div/div[6]').click() #沉睡的目的是讓程序進行地慢一點方便觀看,有時候是等待元素渲染完成 sleep(2) #關(guān)閉瀏覽器 driver.quit()
相對定位(經(jīng)常)
from selenium import webdriver import time #創(chuàng)建瀏覽器 driver = webdriver.Chrome() driver.get("https://www.ctrip.com/") #使用xpath方法模糊定位點擊攜程的攻略.景點功能 driver.find_element_by_xpath('//body//div[@id="root"]//div[@class="lsn_first_nav_wrap_LZamG"][5]').click() #沉睡的目的是讓程序進行地慢一點方便觀看,有時候是等待元素渲染完成 sleep(2) #關(guān)閉瀏覽器 driver.quit()
4.css定位
注意:
1.空格是跨越一級或多級元素
2.>表示下層子標簽
3.屬性:nth-child(1) ,表示相同屬性第一個
#表示id
查找所有id=ie-update的元素 #ie-update
.表示class
查找所有class=lsn_first_nav_wrap_LZamG的元素 .lsn_first_nav_wrap_LZamG
事例
為了定位小米note 11T pro+
的價格
#表示定位class值是brick-list clearfix的ul標簽之下的li標簽,跨越多個層級下class名為price的p標簽,下的span標簽 ul[class="brick-list clearfix"]>li p.price>span
操作
1.實現(xiàn)輸入框自動輸入
#此操作會自動打開瀏覽器,百度網(wǎng)址,輸入"你還好嗎","你怎么樣了","你今天過的怎么樣,充實嗎?"其中之一,而且加載時間會變慢五秒,完成以上結(jié)果后,會自動關(guān)閉頁面 from selenium import webdriver #創(chuàng)建瀏覽器 driver = webdriver.Chrome() driver.get("https://www.baidu.com") #根據(jù)id屬性定位元素 #driver.find_element_by_id('kw').send_keys("你還好嗎") #根據(jù)class屬性定位元素 #driver.find_element_by_class_name('s_ipt').send_keys("你怎么樣了") #根據(jù)name屬性定位元素 driver.find_element_by_name('wd').send_keys("你今天過的怎么樣,充實嗎?") import time #沉睡的目的是讓程序進行地慢一點方便觀看,有時候是等待元素渲染完成 time.sleep(5) #關(guān)閉瀏覽器 driver.quit()
2.清空輸入框
from selenium import webdriver import time #創(chuàng)建瀏覽器,打開百度輸入框 driver = webdriver.Chrome() driver.get("https://www.baidu.com/") #定義變量th為輸入框 th=driver.find_element_by_id('kw') #在輸入框中輸入文字,清空,再輸入 time.sleep(3) th.send_keys("說不完的話.....") time.sleep(1) th.clear() th.send_keys("你還好嗎") time.sleep(2) #關(guān)閉瀏覽器 driver.quit()
3.上傳文件
百度自動上傳圖片搜索
from selenium import webdriver import time #創(chuàng)建瀏覽器 driver=webdriver.Chrome() #瀏覽器輸入百度網(wǎng)址 driver.get("https://www.baidu.com/") #點擊上傳按鈕 driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/span[1]').click() #點擊選擇文件 driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[5]/div/div/form/div/div[2]/div[2]/input').send_keys('C:\\Users\\hhh\\Desktop\\百度元素.png') time.sleep(6) driver.quit()
4.自動化執(zhí)行javaScript方法
在f12下console下輸入以下代碼
#因為日期每月的每天位置都不一樣,所以引入了document.querySelector()方法 #來查找class名為td的標簽中的id值是"June-29-2022" #所以若想點擊其他日期,直接改變id值就行 document.querySelector('[class="pi-input J_DepDate has-trans trigger-node-406"]').placeholder="2022-3-15"
在python下執(zhí)行javaScript格式
driver.execute_script('document.querySelector(\'[class="pi-input J_DepDate has-trans trigger-node-406"]\').placeholder="2022-3-15"')
5.瀏覽器窗口切換
from selenium import webdriver import time #創(chuàng)建瀏覽器,打開百度輸入框 driver = webdriver.Chrome() driver.get("https://www.baidu.com/") #在輸入框中搜索 driver.find_element_by_id('kw').send_keys("hello,world") time.sleep(2) #點擊搜索 driver.find_element_by_id('su').click() #點擊文本的百度百科 driver.find_element_by_xpath('//div[@class="bk_polysemy_1Ef6j"]//a').click() time.sleep(5) #獲取所有的瀏覽器窗口 windows=driver.window_handles #選中第二個新開的瀏覽器窗口 driver.switch_to.window(windows[-1]) #切換到第一個瀏覽器窗口 driver.switch_to.window(windows[0])
6.切換ifame
為什么要切換ifame
原因是網(wǎng)頁嵌套一個網(wǎng)頁,不切換ifame,定位不到元素
from selenium import webdriver import time #創(chuàng)建瀏覽器,打開阿里云注冊界面 driver = webdriver.Chrome() driver.get("https://account.aliyun.com/register/qr_register.htm") #定義一個變量frame ,值是定位frame元素 frame = driver.find_element_by_id('alibaba-register-box') #切到html下frame頁面 driver.switch_to.frame(frame) #在注冊界面賬號欄輸入賬號 driver.find_element_by_xpath('//div[@class=" next-form-item-control"]//input').send_keys("17655870668") #在注冊界面賬號欄輸入密碼 driver.find_element_by_xpath('//div[@class="pwd-wrap"] //input[@type="password"]').send_keys("edwdaf") #再次切換到frame外層 driver.switch_to.parent_frame() time.sleep(3) driver.quit()
7.alert窗口切換
from selenium import webdriver import time #創(chuàng)建瀏覽器 driver = webdriver.Chrome() #打開我的本地彈窗html文件 driver.get("E:\\python_pro\\venv\\1.html") #定義一個變量用于彈出的alert窗口 alert = driver.switch_to.alert print(alert.text) time.sleep(3) driver.quit()
8.模擬鼠標經(jīng)過操作
from selenium import webdriver import time #引入 ActionChains類 from selenium.webdriver.common.action_chains import ActionChains #創(chuàng)建瀏覽器 driver = webdriver.Chrome() #打開京東界面 driver.get("https://www.jd.com") time.sleep(3) #定義一個變量m用于接收"網(wǎng)站導(dǎo)航"定位 m = driver.find_element_by_xpath('//*[@aria-label="網(wǎng)站導(dǎo)航"]') #傳入變量m,并使鼠標懸停在"網(wǎng)站導(dǎo)航" ActionChains(driver).move_to_element(m).perform()#perform()方法代表執(zhí)行的意思 time.sleep(3) #定義一個變量x用于接收"京東通信"定位 x = driver.find_element_by_xpath('//a[@role="menuitem" and text()="京東通信"]') #傳入變量x,并使鼠標點擊懸停在"網(wǎng)站導(dǎo)航"的"京東通信"子頁面 ActionChains(driver).move_to_element(x).click().perform() time.sleep(3) driver.quit()
9.模擬拖拽操作?
from selenium import webdriver import time #引入 ActionChains類 from selenium.webdriver.common.action_chains import ActionChains #創(chuàng)建瀏覽器 driver = webdriver.Chrome() action= ActionChains(driver) #打開地圖界面 driver.get("https://map.baidu.com/@11590057.96,4489812.75,4z") time.sleep(6) time.sleep(3) #定位地圖的定位 u=driver.find_element_by_xpath('//*[@type="system"]') # move_to_element(mask)移動到這個元素,click_and_hold()按下鼠標,move_by_offset(50,30)偏移量拖動,release()松開鼠標,perform()執(zhí)行操作 action.move_to_element(u).click_and_hold().move_by_offset(50,30).release().perform() time.sleep(3) driver.quit()
10.隱式等待?
為了解決一段時間頁面彈出登錄窗口
from selenium import webdriver import time #引入 ActionChains類 from selenium.webdriver.common.action_chains import ActionChains #創(chuàng)建瀏覽器 driver = webdriver.Chrome() #隱式等待頁面元素時間(0-15s) driver.implicitly_wait(15) #打開地圖界面 driver.get("https://map.baidu.com/@11590057.96,4489812.75,4z") #記錄開始時間 start_time = time.perf_counter() #點擊賬號輸入 driver.find_element_by_xpath('//*[@name="userName"]').send_keys('1321454654') #點擊密碼輸入 driver.find_element_by_xpath('//*[@name="password"]').send_keys('zawwe343234') #點擊登錄 driver.find_element_by_xpath('//*[@value="登錄"]').click() action= ActionChains(driver) #定位地圖的定位 u=driver.find_element_by_xpath('//*[@type="system"]') # move_to_element(mask)移動到這個元素,click_and_hold()按下鼠標,move_by_offset(50,30)偏移量拖動,release()松開鼠標,perform()執(zhí)行操作 action.move_to_element(u).click_and_hold().move_by_offset(50,30).release().perform() time.sleep(3) driver.quit()
11.顯示等待?
可以控制單個元素等待時間
from selenium import webdriver import time #引入顯示等待函數(shù) import selenium.webdriver.support.expected_conditions as EC from selenium.webdriver.common.by import By #創(chuàng)建瀏覽器 driver = webdriver.Chrome() #打開地圖界面 driver.get("https://map.baidu.com/@11590057.96,4489812.75,4z") #記錄開始時間 #start_time = time.perf_counter() WebDriverWait(driver,5).until(EC.presence_of_element_located(By.CSS_SELECTOR,'//*[@name="userName"]')) #記錄結(jié)束時間 #end_time = time.perf_counter() #print(f'{end_time - start_time} s') #點擊賬號輸入 driver.find_element_by_xpath('//*[@name="userName"]').send_keys('345761231') #點擊密碼輸入 driver.find_element_by_xpath('//*[@type="password" and @name="password"]').send_keys('21323dwe') # time.sleep(3) # driver.quit()
測試
1.自動填寫登錄csdn
from selenium import webdriver import time #創(chuàng)建瀏覽器 driver=webdriver.Chrome() #瀏覽器輸入csdn網(wǎng)址 driver.get("https://www.csdn.net/?spm=1000.2115.3001.4476") #找到超鏈接文本登錄/注冊,然后點擊 driver.find_element_by_link_text('登錄/注冊').click() #點擊登錄方式-密碼登錄 driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[2]/div[1]/div[1]/div[1]/span[4]').click() #輸入csdn賬號 driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[2]/div[1]/div/div[2]/div/div[1]/div/input').send_keys('賬號') #輸入csdn密碼 driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[2]/div[1]/div/div[2]/div/div[2]/div/input').send_keys('密碼') #登錄 driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[2]/div[1]/div/div[2]/div/div[4]/button').click() time.sleep(10) driver.quit()
2.隱式登錄百度地圖?
from selenium import webdriver import time #引入 ActionChains類 from selenium.webdriver.common.action_chains import ActionChains #創(chuàng)建瀏覽器 driver = webdriver.Chrome() #隱式等待頁面元素時間(0-15s) driver.implicitly_wait(5) #打開地圖界面 driver.get("https://map.baidu.com/@11590057.96,4489812.75,4z") #記錄開始時間 #start_time = time.perf_counter() #點擊賬號輸入 driver.find_element_by_xpath('//*[@name="userName"]').send_keys('423425465') #點擊密碼輸入 driver.find_element_by_xpath('//*[@type="password" and @name="password"]').send_keys('8vsdrw5') # 點擊登錄 driver.find_element_by_xpath('//*[@value="登錄" and @type="submit"]').click() #記錄結(jié)束時間 #end_time = time.perf_counter() #print(f'{end_time - start_time} s') action = ActionChains(driver) #定位地圖的定位 u=driver.find_element_by_xpath('//*[@type="system"]') #move_to_element(mask)移動到這個元素,click_and_hold()按下鼠標,move_by_offset(50,30)偏移量拖動,release()松開鼠標,perform()執(zhí)行操作 action.move_to_element(u).click_and_hold().move_by_offset(50,30).release().perform() # time.sleep(3) # driver.quit()
到此這篇關(guān)于python自動化實現(xiàn)的簡單使用的文章就介紹到這了,更多相關(guān)python自動化 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
tensorflow之tf.record實現(xiàn)存浮點數(shù)數(shù)組
今天小編就為大家分享一篇tensorflow之tf.record實現(xiàn)存浮點數(shù)數(shù)組,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02python設(shè)置Pyplot的動態(tài)rc參數(shù)、繪圖的填充
本文主要介紹了python設(shè)置Pyplot的動態(tài)rc參數(shù)、繪圖的填充,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06python中以函數(shù)作為參數(shù)(回調(diào)函數(shù))的實現(xiàn)方法
這篇文章主要介紹了python中以函數(shù)作為參數(shù)(回調(diào)函數(shù))的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01jupyter notebook 的工作空間設(shè)置操作
這篇文章主要介紹了jupyter notebook 的工作空間設(shè)置操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04你知道怎么改進Python 二分法和牛頓迭代法求算術(shù)平方根嗎
這篇文章主要介紹了Python編程實現(xiàn)二分法和牛頓迭代法求平方根代碼的改進,具有一定參考價值,需要的朋友可以了解下,希望能夠給你帶來幫助2021-08-08