亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python實現(xiàn)自動登錄跳轉頁面并獲取信息

 更新時間:2025年05月27日 09:51:04   作者:大佬,救命?。。? 
這篇文章主要為大家詳細介紹了如何使用python實現(xià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 方法已經被棄用并在較新的版本中移除。從 Selenium 4 開始,推薦使用新的方法來查找元素。
您可以使用 find_element 方法,并通過 By.ID 來指定使用 ID 查找元素。首先,確保您已經導入了 By 類。
'''

解決方法,使用符合當前最新庫的語法,丟棄之前的錯誤寫法

# 登錄測試
 
from selenium import webdriver
from selenium.webdriver.common.by import By  # 導入 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方式定位跳轉

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,已經被棄用并移除。
這是為了統(tǒng)一和簡化 API,并鼓勵使用更現(xiàn)代的 find_element 方法結合 By 類來定位元素。
為了修復你的代碼,你需要使用 By.LINK_TEXT 來代替直接調用 find_element_by_link_text。
'''

此次,放棄之前廢棄的語法,重新修改到對應的語法,如下:

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.懸停的關鍵語句及意義

ActionChains(dx).move_to_element(wz).perform() 

ActionChains(dx).move_to_element(wz).perform() 是 Selenium WebDriver API 中的一個操作鏈,用于模擬用戶將鼠標移動到頁面上的特定元素上的行為。下面是對這個操作的詳細解析:

ActionChains 類:

ActionChains 是 Selenium 提供的一個類,用于生成一系列的用戶交互動作,比如點擊、鍵盤輸入、鼠標移動等。

這些動作可以被串聯(lián)起來,形成一個動作鏈,然后通過調用 perform() 方法一次性執(zhí)行。

dx 參數(shù):

dx 在這里代表一個 WebDriver 實例,它是與瀏覽器交互的接口。

ActionChains 類的構造函數(shù)需要傳入一個 WebDriver 實例,以便能夠控制瀏覽器執(zhí)行相應的動作。

move_to_element 方法:

move_to_element(element) 是 ActionChains 類的一個方法,用于將鼠標移動到指定的元素上。

參數(shù) element 是一個 WebElement 對象,代表頁面上的一個元素。這個對象通常是通過 WebDriver 的 find_element 或 find_elements 方法找到的。

wz 參數(shù):

wz 在這個上下文中是一個變量,它應該引用了一個 WebElement 對象。

在您的代碼中,wz 是通過 dx.find_element_by_name("tj_briicon") 獲取的。但是,如之前所述,"tj_briicon" 通常不是百度首頁元素的正確 name 屬性,因此這行代碼可能無法找到正確的元素。

perform 方法:

perform() 是 ActionChains 類的一個方法,用于執(zhí)行之前添加到動作鏈中的所有動作。

在調用 perform() 之前,可以添加多個動作到動作鏈中,然后一次性執(zhí)行它們。

在這個例子中,動作鏈中只有一個動作:將鼠標移動到 wz 指定的元素上。

綜上所述,ActionChains(dx).move_to_element(wz).perform() 的作用是:

創(chuàng)建一個與 WebDriver 實例 dx 關聯(lián)的動作鏈。

將鼠標移動到由 wz 指定的元素上。

執(zhí)行這個動作鏈。

但是,由于 wz 可能沒有正確引用到頁面上的元素(因為使用了錯誤的定位策略),這個操作可能無法按預期工作。正確的做法是使用正確的定位策略來找到元素,并確保該元素在嘗試移動鼠標到其上之前是可見和可交互的。

2.懸停相關的其他拓展

ActionChains類(鼠標操作)

常用于模擬鼠標的行為,比如單擊、雙擊、拖拽等行為

  • click(on_element=None)     --- 鼠標單擊
  • double_click(on_element=None)    ---  雙擊      
  • context_click(on_element=None)   ---  右擊      
  • click_and_hold(on_element=None)   ---  鼠標單擊并且按住不放
  • drag_and_drop(source,target)   ---  拖拽
  • drag_and_drop_by_offset(source,xoffset,yoffset)   ---  將目標拖動到指定的位置
  • key_down(value,element=None)  ---  按下某個鍵盤上的鍵
  • key_up(value,element=None)   ---  松開某個鍵
  • move_by_offset(xoffset,yoffset)   ---  鼠標從當前位置移動到某個坐標
  • move_to_element(to_element)   ---  鼠標移動到某個元素
  • move_to_element_with_offset(to_element,xoffset,yoffset)  ---  移動到距某個元素(左上角坐標)多少距離的位置
  • perform()    ---  執(zhí)行鏈中的所有動作
  • release(on_element=None)   ---  在某個元素位置松開鼠標左

3.懸停相關的代碼示例

3.1 示例百度學術

#懸停百度
 
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("學術").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,已經被棄用并最終從庫中移除。這就是為什么你在嘗試使用 find_element_by_name 方法時遇到了 AttributeError。
為了解決這個問題,你應該使用 find_element 方法結合 By 類來定位元素。By 類提供了多種方式來定位元素,如通過名稱、ID、類名、標簽名、鏈接文本等。
首先,你需要從 selenium.webdriver.common.by 導入 By 類。然后,你可以使用 find_element(By.NAME, "value") 的形式來替代 find_element_by_name("value")
'''

更新后最新包和庫的更改

#懸停百度學術(新)
 
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By  # 導入 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)
 
# 注意:'學術' 這個鏈接文本是否存在于當前頁面需要確認,
# 因為百度首頁的布局和鏈接可能會變化。如果鏈接不存在,這里會拋出錯誤。
dx.find_element(By.LINK_TEXT, "學術").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  # 導入 By 類
 
# 創(chuàng)建 WebDriver 實例
dx = webdriver.Chrome()
 
# 加載百度首頁
dx.get("http://www.baidu.com")
dx.maximize_window()
sleep(2)
 
# 定位到設置圖標(注意: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)
 
# 關閉瀏覽器
dx.quit()

不使用懸停,點擊跳轉

#未懸停直接點擊
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()

調整完版本后,對異常處理 應考慮優(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("未找到設置圖標元素")
        # 發(fā)生異常時退出,避免后續(xù)代碼執(zhí)行
        dx.quit()
        raise
    except Exception as e:
        print(f"點擊設置圖標時發(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ā)生異常,都確保關閉瀏覽器
    dx.quit()

四.獲取網頁標簽及文本

1.獲取網頁標題

#title 獲取網頁標題
 
from  selenium import   webdriver
dx=webdriver.Chrome()
dx.get("http://www.baidu.com")
dx.maximize_window()
t=dx.title #百度一下,你就知道
print(t)
 
#如果日志不是預期報錯提醒
assert t=="百度一下,你就知道"

2.重轉網頁,獲取更新標題

#跳轉完后,標題更新
 
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.獲取網頁標題

#title 獲取網頁標題
 
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=="設置":
    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)
    
    # 查找設置圖標元素并獲取其文本
    wb_element = dx.find_element(By.XPATH, '//*[@id="s-usersetting-top"]')
    wb = wb_element.text
    print(wb)
    if wb == "設置":
        print("ok")
    else:
        print("no")
finally:
    # 確保關閉瀏覽器
    dx.quit()

以上就是python實現(xiàn)自動登錄跳轉頁面并獲取信息的詳細內容,更多關于python自動登錄的資料請關注腳本之家其它相關文章!

相關文章

最新評論