python實現(xiàn)自動登錄跳轉(zhuǎn)頁面并獲取信息
一.python輸入點擊登錄頁面
from selenium import webdriver
from time import sleep
dx=webdriver.Chrome()
# dx.get("http://192.168.10.132:8080/cms/")
dx.get("http://192.168.10.132:8080/cms/manage/login.do")
dx.maximize_window()
sleep(2)
dx.find_element_by_id("userAccount").send_keys("admin")
sleep(2)
dx.find_element_by_id("loginPwd").send_keys("123456")
sleep(2)
dx.find_element_by_id("loginBtn").click()
sleep(10)
dx.quit()在老版本可以,若是更新到最新的插件和第三方庫,報錯
''' 報錯:
---> 11 dx.find_element_by_id("userAccount").send_keys("admin")
12 sleep(2)
13 dx.find_element_by_id("loginPwd").send_keys("123456")
AttributeError: 'WebDriver' object has no attribute 'find_element_by_id'
'''
'''解析:
在您的代碼中,出現(xiàn)的錯誤 AttributeError: 'WebDriver' object has no attribute 'find_element_by_id' 是因為您使用的 Selenium 庫中,find_element_by_id 方法已經(jīng)被棄用并在較新的版本中移除。從 Selenium 4 開始,推薦使用新的方法來查找元素。
您可以使用 find_element 方法,并通過 By.ID 來指定使用 ID 查找元素。首先,確保您已經(jīng)導(dǎo)入了 By 類。
'''
解決方法,使用符合當(dāng)前最新庫的語法,丟棄之前的錯誤寫法
# 登錄測試
from selenium import webdriver
from selenium.webdriver.common.by import By # 導(dǎo)入 By 類以使用新的查找元素方法
from time import sleep
dx = webdriver.Chrome()
dx.get("http://192.168.10.132:8080/cms/manage/login.do")
dx.maximize_window()
sleep(2)
dx.find_element(By.ID, "userAccount").send_keys("admin")
sleep(2)
dx.find_element(By.ID, "loginPwd").send_keys("123456")
sleep(2)
dx.find_element(By.ID, "loginBtn").click()
sleep(10)
dx.quit()二.若是link方式定位跳轉(zhuǎn)
from selenium import webdriver
from time import sleep
dx=webdriver.Chrome()
dx.get("http://www.baidu.com")
dx.maximize_window()
sleep(2)
dx.find_element_by_link_text("地圖").click()
若是版本及庫更新到最新,會報錯如下:
'''
AttributeError Traceback (most recent call last)
<ipython-input-1-081328daae09> in <module>
5 dx.maximize_window()
6 sleep(2)
----> 7 dx.find_element_by_link_text("地圖").click()
AttributeError: 'WebDriver' object has no attribute 'find_element_by_link_text'
'''
'''
在 Selenium 4 中,許多舊的定位元素的方法,如 find_element_by_link_text,已經(jīng)被棄用并移除。
這是為了統(tǒng)一和簡化 API,并鼓勵使用更現(xiàn)代的 find_element 方法結(jié)合 By 類來定位元素。
為了修復(fù)你的代碼,你需要使用 By.LINK_TEXT 來代替直接調(diào)用 find_element_by_link_text。
'''
此次,放棄之前廢棄的語法,重新修改到對應(yīng)的語法,如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
dx = webdriver.Chrome()
dx.get("http://www.baidu.com")
dx.maximize_window()
sleep(2)
# 使用新的方法查找并點擊鏈接文本為"地圖"的元素
dx.find_element(By.LINK_TEXT, "地圖").click()
sleep(10)
dx.quit()
三.懸停
1.懸停的關(guān)鍵語句及意義
ActionChains(dx).move_to_element(wz).perform()
ActionChains(dx).move_to_element(wz).perform() 是 Selenium WebDriver API 中的一個操作鏈,用于模擬用戶將鼠標(biāo)移動到頁面上的特定元素上的行為。下面是對這個操作的詳細解析:
ActionChains 類:
ActionChains 是 Selenium 提供的一個類,用于生成一系列的用戶交互動作,比如點擊、鍵盤輸入、鼠標(biāo)移動等。
這些動作可以被串聯(lián)起來,形成一個動作鏈,然后通過調(diào)用 perform() 方法一次性執(zhí)行。
dx 參數(shù):
dx 在這里代表一個 WebDriver 實例,它是與瀏覽器交互的接口。
ActionChains 類的構(gòu)造函數(shù)需要傳入一個 WebDriver 實例,以便能夠控制瀏覽器執(zhí)行相應(yīng)的動作。
move_to_element 方法:
move_to_element(element) 是 ActionChains 類的一個方法,用于將鼠標(biāo)移動到指定的元素上。
參數(shù) element 是一個 WebElement 對象,代表頁面上的一個元素。這個對象通常是通過 WebDriver 的 find_element 或 find_elements 方法找到的。
wz 參數(shù):
wz 在這個上下文中是一個變量,它應(yīng)該引用了一個 WebElement 對象。
在您的代碼中,wz 是通過 dx.find_element_by_name("tj_briicon") 獲取的。但是,如之前所述,"tj_briicon" 通常不是百度首頁元素的正確 name 屬性,因此這行代碼可能無法找到正確的元素。
perform 方法:
perform() 是 ActionChains 類的一個方法,用于執(zhí)行之前添加到動作鏈中的所有動作。
在調(diào)用 perform() 之前,可以添加多個動作到動作鏈中,然后一次性執(zhí)行它們。
在這個例子中,動作鏈中只有一個動作:將鼠標(biāo)移動到 wz 指定的元素上。
綜上所述,ActionChains(dx).move_to_element(wz).perform() 的作用是:
創(chuàng)建一個與 WebDriver 實例 dx 關(guān)聯(lián)的動作鏈。
將鼠標(biāo)移動到由 wz 指定的元素上。
執(zhí)行這個動作鏈。
但是,由于 wz 可能沒有正確引用到頁面上的元素(因為使用了錯誤的定位策略),這個操作可能無法按預(yù)期工作。正確的做法是使用正確的定位策略來找到元素,并確保該元素在嘗試移動鼠標(biāo)到其上之前是可見和可交互的。
2.懸停相關(guān)的其他拓展
ActionChains類(鼠標(biāo)操作)
常用于模擬鼠標(biāo)的行為,比如單擊、雙擊、拖拽等行為
- click(on_element=None) --- 鼠標(biāo)單擊
- double_click(on_element=None) --- 雙擊
- context_click(on_element=None) --- 右擊
- click_and_hold(on_element=None) --- 鼠標(biāo)單擊并且按住不放
- drag_and_drop(source,target) --- 拖拽
- drag_and_drop_by_offset(source,xoffset,yoffset) --- 將目標(biāo)拖動到指定的位置
- key_down(value,element=None) --- 按下某個鍵盤上的鍵
- key_up(value,element=None) --- 松開某個鍵
- move_by_offset(xoffset,yoffset) --- 鼠標(biāo)從當(dāng)前位置移動到某個坐標(biāo)
- move_to_element(to_element) --- 鼠標(biāo)移動到某個元素
- move_to_element_with_offset(to_element,xoffset,yoffset) --- 移動到距某個元素(左上角坐標(biāo))多少距離的位置
- perform() --- 執(zhí)行鏈中的所有動作
- release(on_element=None) --- 在某個元素位置松開鼠標(biāo)左
3.懸停相關(guān)的代碼示例
3.1 示例百度學(xué)術(shù)
#懸停百度
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
dx=webdriver.Chrome()
dx.get("http://www.baidu.com")
dx.maximize_window()
sleep(2)
wz=dx.find_element_by_name("tj_briicon")
ActionChains(dx).move_to_element(wz).perform()
sleep(2)
dx.find_element_by_link_text("學(xué)術(shù)").click()
在新版本中依舊報錯
'''報錯:
AttributeError Traceback (most recent call last)
<ipython-input-1-60c3e6400a39> in <module>
8 dx.maximize_window()
9 sleep(2)
---> 10 wz=dx.find_element_by_name("tj_briicon")
11 ActionChains(dx).move_to_element(wz).perform()
12 sleep(2)
AttributeError: 'WebDriver' object has no attribute 'find_element_by_name'
'''
'''解決:
在較新版本的 Selenium 中,一些舊的元素查找方法,如 find_element_by_name,已經(jīng)被棄用并最終從庫中移除。這就是為什么你在嘗試使用 find_element_by_name 方法時遇到了 AttributeError。
為了解決這個問題,你應(yīng)該使用 find_element 方法結(jié)合 By 類來定位元素。By 類提供了多種方式來定位元素,如通過名稱、ID、類名、標(biāo)簽名、鏈接文本等。
首先,你需要從 selenium.webdriver.common.by 導(dǎo)入 By 類。然后,你可以使用 find_element(By.NAME, "value") 的形式來替代 find_element_by_name("value")
'''
更新后最新包和庫的更改
#懸停百度學(xué)術(shù)(新)
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By # 導(dǎo)入 By 類
dx = webdriver.Chrome()
dx.get("http://www.baidu.com")
dx.maximize_window()
sleep(2)
# 使用 By.NAME 來替代 find_element_by_name
wz = dx.find_element(By.NAME, "tj_briicon")
ActionChains(dx).move_to_element(wz).perform()
sleep(2)
# 注意:'學(xué)術(shù)' 這個鏈接文本是否存在于當(dāng)前頁面需要確認(rèn),
# 因為百度首頁的布局和鏈接可能會變化。如果鏈接不存在,這里會拋出錯誤。
dx.find_element(By.LINK_TEXT, "學(xué)術(shù)").click()3.2 示例百度高級搜索
使用懸停
#懸停百度高級搜索
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
dx=webdriver.Chrome()
dx.get("http://www.baidu.com")
dx.maximize_window()
sleep(2)
wz=dx.find_element_by_xpath('//*[@id="s-usersetting-top"]')
ActionChains(dx).move_to_element(wz).perform()#懸停
sleep(3)
dx.find_element_by_link_text("高級搜索").click()
#懸停百度高級搜索(新)
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By # 導(dǎo)入 By 類
# 創(chuàng)建 WebDriver 實例
dx = webdriver.Chrome()
# 加載百度首頁
dx.get("http://www.baidu.com")
dx.maximize_window()
sleep(2)
# 定位到設(shè)置圖標(biāo)(注意:XPath 可能會因頁面更新而變化)
wz = dx.find_element(By.XPATH, '//*[@id="s-usersetting-top"]')
# 執(zhí)行懸停操作
ActionChains(dx).move_to_element(wz).perform()
sleep(3)
# 點擊高級搜索鏈接(注意:這里的鏈接文本可能會因頁面更新而變化)
try:
dx.find_element(By.LINK_TEXT, "高級搜索").click()
except Exception as e:
print(f"無法點擊高級搜索鏈接:{e}")
sleep(5)
# 關(guān)閉瀏覽器
dx.quit()不使用懸停,點擊跳轉(zhuǎn)
#未懸停直接點擊
from selenium import webdriver
from time import sleep
dx=webdriver.Chrome()
dx.get("http://www.baidu.com")
dx.maximize_window()
sleep(2)
dx.find_element_by_xpath('//*[@id="s-usersetting-top"]').click()
sleep(3)
dx.find_element_by_link_text("高級搜索").click()
#未懸停直接點擊(新)
from selenium import webdriver
from time import sleep
dx=webdriver.Chrome()
dx.get("http://www.baidu.com")
dx.maximize_window()
sleep(2)
dx.find_element(By.XPATH,'//*[@id="s-usersetting-top"]').click()
sleep(3)
dx.find_element(By.LINK_TEXT,"高級搜索").click()
調(diào)整完版本后,對異常處理 應(yīng)考慮優(yōu)化,具體如下
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException, TimeoutException
from selenium.webdriver.common.by import By
from time import sleep
dx = webdriver.Chrome()
try:
dx.get("http://www.baidu.com")
dx.maximize_window()
sleep(2)
try:
dx.find_element(By.XPATH, '//*[@id="s-usersetting-top"]').click()
except NoSuchElementException:
print("未找到設(shè)置圖標(biāo)元素")
# 發(fā)生異常時退出,避免后續(xù)代碼執(zhí)行
dx.quit()
raise
except Exception as e:
print(f"點擊設(shè)置圖標(biāo)時發(fā)生異常: {e}")
dx.quit()
raise
sleep(3)
try: # 嘗試點擊高級搜索鏈接
dx.find_element(By.LINK_TEXT, "高級搜索").click()
except NoSuchElementException:
print("未找到高級搜索鏈接元素")
except Exception as e:
print(f"點擊高級搜索鏈接時發(fā)生異常: {e}")
finally:
# 無論是否發(fā)生異常,都確保關(guān)閉瀏覽器
dx.quit()四.獲取網(wǎng)頁標(biāo)簽及文本
1.獲取網(wǎng)頁標(biāo)題
#title 獲取網(wǎng)頁標(biāo)題
from selenium import webdriver
dx=webdriver.Chrome()
dx.get("http://www.baidu.com")
dx.maximize_window()
t=dx.title #百度一下,你就知道
print(t)
#如果日志不是預(yù)期報錯提醒
assert t=="百度一下,你就知道"
2.重轉(zhuǎn)網(wǎng)頁,獲取更新標(biāo)題
#跳轉(zhuǎn)完后,標(biāo)題更新
from selenium import webdriver
from time import sleep
dx=webdriver.Chrome()
dx.get("http://www.baidu.com")
dx.maximize_window()
sleep(2)
dx.get("http://www.jd.com")
dx.maximize_window()
t=dx.title #百度一下,你就知道
print(t)
3.獲取網(wǎng)頁標(biāo)題
#title 獲取網(wǎng)頁標(biāo)題
from selenium import webdriver
from time import sleep
dx=webdriver.Chrome()
dx.get("http://www.baidu.com")
dx.maximize_window()
sleep(2)
wb=dx.find_element_by_xpath('//*[@id="s-usersetting-top"]').text
print(wb)
if wb=="設(shè)置":
print("ok")
else:
print("no")
更新版本并優(yōu)化代碼
# 打印獲取到的文本
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
dx = webdriver.Chrome()
try:
# 加載百度首頁
dx.get("http://www.baidu.com")
dx.maximize_window()
sleep(2)
# 查找設(shè)置圖標(biāo)元素并獲取其文本
wb_element = dx.find_element(By.XPATH, '//*[@id="s-usersetting-top"]')
wb = wb_element.text
print(wb)
if wb == "設(shè)置":
print("ok")
else:
print("no")
finally:
# 確保關(guān)閉瀏覽器
dx.quit()以上就是python實現(xiàn)自動登錄跳轉(zhuǎn)頁面并獲取信息的詳細內(nèi)容,更多關(guān)于python自動登錄的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
PyCharm+PySpark遠程調(diào)試的環(huán)境配置的方法
今天小編就為大家分享一篇PyCharm+PySpark遠程調(diào)試的環(huán)境配置的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11
關(guān)于Python3爬蟲利器Appium的安裝步驟
在本篇文章里小編給大家整理的是一篇關(guān)于Python3爬蟲利器Appium的安裝步驟,需要的朋友們可以跟著參考下。2020-07-07
python實現(xiàn)字典合并的五種方法(附示例代碼)
在Python中,有多種方法可以通過使用各種函數(shù)和構(gòu)造函數(shù)來合并字典,在本文中,我們將討論一些合并字典的方法,并通過代碼示例講解的非常詳細,具有一定的參考價值,需要的朋友可以參考下2024-04-04
王純業(yè)的Python學(xué)習(xí)筆記 下載
這篇文章主要介紹了王純業(yè)的Python學(xué)習(xí)筆記 下載2007-02-02
Pytorch實戰(zhàn)之?dāng)?shù)據(jù)加載和處理詳解
Pytorch提供了許多工具來簡化和希望數(shù)據(jù)加載,使代碼更具可讀性,本文將通過一些簡單示例為大家具體講講,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-06-06
python中通過selenium簡單操作及元素定位知識點總結(jié)
在本篇文章里小編給大家整理的是關(guān)于python中通過selenium簡單操作及元素定位的知識點,有需要的朋友們可以學(xué)習(xí)下。2019-09-09

