当前位置: 代码网 > it编程>前端脚本>Python > python实现自动登录跳转页面并获取信息

python实现自动登录跳转页面并获取信息

2025年05月27日 Python 我要评论
一.python输入点击登录页面from selenium import webdriverfrom time import sleepdx=webdriver.chrome()# dx.g

一.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'
'''
 
 
 
'''解析:
在您的代码中,出现的错误 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,已经被弃用并移除。
这是为了统一和简化 api,并鼓励使用更现代的 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 提供的一个类,用于生成一系列的用户交互动作,比如点击、键盘输入、鼠标移动等。

这些动作可以被串联起来,形成一个动作链,然后通过调用 perform() 方法一次性执行。

dx 参数:

dx 在这里代表一个 webdriver 实例,它是与浏览器交互的接口。

actionchains 类的构造函数需要传入一个 webdriver 实例,以便能够控制浏览器执行相应的动作。

move_to_element 方法:

move_to_element(element) 是 actionchains 类的一个方法,用于将鼠标移动到指定的元素上。

参数 element 是一个 webelement 对象,代表页面上的一个元素。这个对象通常是通过 webdriver 的 find_element 或 find_elements 方法找到的。

wz 参数:

wz 在这个上下文中是一个变量,它应该引用了一个 webelement 对象。

在您的代码中,wz 是通过 dx.find_element_by_name("tj_briicon") 获取的。但是,如之前所述,"tj_briicon" 通常不是百度首页元素的正确 name 属性,因此这行代码可能无法找到正确的元素。

perform 方法:

perform() 是 actionchains 类的一个方法,用于执行之前添加到动作链中的所有动作。

在调用 perform() 之前,可以添加多个动作到动作链中,然后一次性执行它们。

在这个例子中,动作链中只有一个动作:将鼠标移动到 wz 指定的元素上。

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

创建一个与 webdriver 实例 dx 关联的动作链。

将鼠标移动到由 wz 指定的元素上。

执行这个动作链。

但是,由于 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()    ---  执行链中的所有动作
  • 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 类
 
# 创建 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"]')
 
# 执行悬停操作
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()

调整完版本后,对异常处理 应考虑优化,具体如下

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("未找到设置图标元素")
        # 发生异常时退出,避免后续代码执行
        dx.quit()
        raise
    except exception as e:
        print(f"点击设置图标时发生异常: {e}")
        dx.quit()
        raise
    sleep(3)
    
 
    try:    # 尝试点击高级搜索链接
        dx.find_element(by.link_text, "高级搜索").click()
    except nosuchelementexception:
        print("未找到高级搜索链接元素")
    except exception as e:
        print(f"点击高级搜索链接时发生异常: {e}")
finally:
    # 无论是否发生异常,都确保关闭浏览器
    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")

更新版本并优化代码

# 打印获取到的文本
 
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实现自动登录跳转页面并获取信息的详细内容,更多关于python自动登录的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com