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

python實(shí)現(xiàn)自動(dòng)登錄跳轉(zhuǎn)頁(yè)面并獲取信息

 更新時(shí)間:2025年05月27日 09:51:04   作者:大佬,救命?。?!  
這篇文章主要為大家詳細(xì)介紹了如何使用python實(shí)現(xiàn)自動(dòng)登錄跳轉(zhuǎn)頁(yè)面并獲取信息功能,文中的示例代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一.python輸入點(diǎn)擊登錄頁(yè)面

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()

在老版本可以,若是更新到最新的插件和第三方庫(kù),報(bào)錯(cuò)

''' 報(bào)錯(cuò):
---> 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)的錯(cuò)誤 AttributeError: 'WebDriver' object has no attribute 'find_element_by_id' 是因?yàn)槟褂玫?Selenium 庫(kù)中,find_element_by_id 方法已經(jīng)被棄用并在較新的版本中移除。從 Selenium 4 開始,推薦使用新的方法來(lái)查找元素。
您可以使用 find_element 方法,并通過(guò) By.ID 來(lái)指定使用 ID 查找元素。首先,確保您已經(jīng)導(dǎo)入了 By 類。
'''

解決方法,使用符合當(dāng)前最新庫(kù)的語(yǔ)法,丟棄之前的錯(cuò)誤寫法

# 登錄測(cè)試
 
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()

若是版本及庫(kù)更新到最新,會(huì)報(bào)錯(cuò)如下:

'''
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)一和簡(jiǎn)化 API,并鼓勵(lì)使用更現(xiàn)代的 find_element 方法結(jié)合 By 類來(lái)定位元素。
為了修復(fù)你的代碼,你需要使用 By.LINK_TEXT 來(lái)代替直接調(diào)用 find_element_by_link_text。
'''

此次,放棄之前廢棄的語(yǔ)法,重新修改到對(duì)應(yīng)的語(yǔ)法,如下:

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)
# 使用新的方法查找并點(diǎn)擊鏈接文本為"地圖"的元素
dx.find_element(By.LINK_TEXT, "地圖").click()
sleep(10)
dx.quit()

三.懸停

1.懸停的關(guān)鍵語(yǔ)句及意義

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

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

ActionChains 類:

ActionChains 是 Selenium 提供的一個(gè)類,用于生成一系列的用戶交互動(dòng)作,比如點(diǎn)擊、鍵盤輸入、鼠標(biāo)移動(dòng)等。

這些動(dòng)作可以被串聯(lián)起來(lái),形成一個(gè)動(dòng)作鏈,然后通過(guò)調(diào)用 perform() 方法一次性執(zhí)行。

dx 參數(shù):

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

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

move_to_element 方法:

move_to_element(element) 是 ActionChains 類的一個(gè)方法,用于將鼠標(biāo)移動(dòng)到指定的元素上。

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

wz 參數(shù):

wz 在這個(gè)上下文中是一個(gè)變量,它應(yīng)該引用了一個(gè) WebElement 對(duì)象。

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

perform 方法:

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

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

在這個(gè)例子中,動(dòng)作鏈中只有一個(gè)動(dòng)作:將鼠標(biāo)移動(dòng)到 wz 指定的元素上。

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

創(chuàng)建一個(gè)與 WebDriver 實(shí)例 dx 關(guān)聯(lián)的動(dòng)作鏈。

將鼠標(biāo)移動(dòng)到由 wz 指定的元素上。

執(zhí)行這個(gè)動(dòng)作鏈。

但是,由于 wz 可能沒(méi)有正確引用到頁(yè)面上的元素(因?yàn)槭褂昧隋e(cuò)誤的定位策略),這個(gè)操作可能無(wú)法按預(yù)期工作。正確的做法是使用正確的定位策略來(lái)找到元素,并確保該元素在嘗試移動(dòng)鼠標(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)拖動(dòng)到指定的位置
  • key_down(value,element=None)  ---  按下某個(gè)鍵盤上的鍵
  • key_up(value,element=None)   ---  松開某個(gè)鍵
  • move_by_offset(xoffset,yoffset)   ---  鼠標(biāo)從當(dāng)前位置移動(dòng)到某個(gè)坐標(biāo)
  • move_to_element(to_element)   ---  鼠標(biāo)移動(dòng)到某個(gè)元素
  • move_to_element_with_offset(to_element,xoffset,yoffset)  ---  移動(dòng)到距某個(gè)元素(左上角坐標(biāo))多少距離的位置
  • perform()    ---  執(zhí)行鏈中的所有動(dòng)作
  • release(on_element=None)   ---  在某個(gè)元素位置松開鼠標(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()

在新版本中依舊報(bào)錯(cuò)

'''報(bào)錯(cuò):
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)被棄用并最終從庫(kù)中移除。這就是為什么你在嘗試使用 find_element_by_name 方法時(shí)遇到了 AttributeError。
為了解決這個(gè)問(wèn)題,你應(yīng)該使用 find_element 方法結(jié)合 By 類來(lái)定位元素。By 類提供了多種方式來(lái)定位元素,如通過(guò)名稱、ID、類名、標(biāo)簽名、鏈接文本等。
首先,你需要從 selenium.webdriver.common.by 導(dǎo)入 By 類。然后,你可以使用 find_element(By.NAME, "value") 的形式來(lái)替代 find_element_by_name("value")
'''

更新后最新包和庫(kù)的更改

#懸停百度學(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 來(lái)替代 find_element_by_name
wz = dx.find_element(By.NAME, "tj_briicon")
ActionChains(dx).move_to_element(wz).perform()
sleep(2)
 
# 注意:'學(xué)術(shù)' 這個(gè)鏈接文本是否存在于當(dāng)前頁(yè)面需要確認(rèn),
# 因?yàn)榘俣仁醉?yè)的布局和鏈接可能會(huì)變化。如果鏈接不存在,這里會(huì)拋出錯(cuò)誤。
dx.find_element(By.LINK_TEXT, "學(xué)術(shù)").click()

3.2 示例百度高級(jí)搜索

使用懸停

#懸停百度高級(jí)搜索
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("高級(jí)搜索").click()
#懸停百度高級(jí)搜索(新)
 
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 實(shí)例
dx = webdriver.Chrome()
 
# 加載百度首頁(yè)
dx.get("http://www.baidu.com")
dx.maximize_window()
sleep(2)
 
# 定位到設(shè)置圖標(biāo)(注意:XPath 可能會(huì)因頁(yè)面更新而變化)
wz = dx.find_element(By.XPATH, '//*[@id="s-usersetting-top"]')
 
# 執(zhí)行懸停操作
ActionChains(dx).move_to_element(wz).perform()
sleep(3)
 
# 點(diǎn)擊高級(jí)搜索鏈接(注意:這里的鏈接文本可能會(huì)因頁(yè)面更新而變化)
try:
    dx.find_element(By.LINK_TEXT, "高級(jí)搜索").click()
except Exception as e:
    print(f"無(wú)法點(diǎn)擊高級(jí)搜索鏈接:{e}")
sleep(5)
 
# 關(guān)閉瀏覽器
dx.quit()

不使用懸停,點(diǎn)擊跳轉(zhuǎn)

#未懸停直接點(diǎ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("高級(jí)搜索").click()
#未懸停直接點(diǎ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,"高級(jí)搜索").click()

調(diào)整完版本后,對(duì)異常處理 應(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ā)生異常時(shí)退出,避免后續(xù)代碼執(zhí)行
        dx.quit()
        raise
    except Exception as e:
        print(f"點(diǎn)擊設(shè)置圖標(biāo)時(shí)發(fā)生異常: {e}")
        dx.quit()
        raise
    sleep(3)
    
 
    try:    # 嘗試點(diǎn)擊高級(jí)搜索鏈接
        dx.find_element(By.LINK_TEXT, "高級(jí)搜索").click()
    except NoSuchElementException:
        print("未找到高級(jí)搜索鏈接元素")
    except Exception as e:
        print(f"點(diǎn)擊高級(jí)搜索鏈接時(shí)發(fā)生異常: {e}")
finally:
    # 無(wú)論是否發(fā)生異常,都確保關(guān)閉瀏覽器
    dx.quit()

四.獲取網(wǎng)頁(yè)標(biāo)簽及文本

1.獲取網(wǎng)頁(yè)標(biāo)題

#title 獲取網(wǎng)頁(yè)標(biāo)題
 
from  selenium import   webdriver
dx=webdriver.Chrome()
dx.get("http://www.baidu.com")
dx.maximize_window()
t=dx.title #百度一下,你就知道
print(t)
 
#如果日志不是預(yù)期報(bào)錯(cuò)提醒
assert t=="百度一下,你就知道"

2.重轉(zhuǎn)網(wǎng)頁(yè),獲取更新標(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)頁(yè)標(biāo)題

#title 獲取網(wǎng)頁(yè)標(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:
    # 加載百度首頁(yè)
    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實(shí)現(xiàn)自動(dòng)登錄跳轉(zhuǎn)頁(yè)面并獲取信息的詳細(xì)內(nèi)容,更多關(guān)于python自動(dòng)登錄的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論