weixin_46132012 2024-12-25 11:14 采纳率: 40%
浏览 180
已结题

drissionpage使用问题

我想用drissionpage自动化登录https://www.psbc.com/cn/%EF%BC%8C%E7%BD%91%E9%A1%B5%E5%BC%B9%E5%87%BA%E5%90%8E%E8%83%BD%E8%AE%A9%E4%BA%BA%E4%B8%80%E7%9C%BC%E7%9C%8B%E5%88%B0%EF%BC%8C%E5%B9%B6%E8%87%AA%E5%8A%A8%E7%82%B9%E5%87%BB%E4%BC%81%E4%B8%9A%E7%BD%91%E9%93%B6%E7%99%BB%E5%BD%95%E6%8C%89%E9%92%AE%E3%80%82%E5%9B%9E%E7%AD%94%E5%AF%B91%E4%B8%AA%E9%97%AE%E9%A2%98%EF%BC%8C%E7%BB%99%E6%89%93%E8%B5%8F%EF%BC%8C%E4%B8%A4%E4%B8%AA%E9%83%BD%E5%AF%B9%E7%9A%84%E8%AF%9D%E5%85%A8%E9%A2%9D%E4%BB%98%E8%B4%B9%E3%80%82
问题1:程序运行后,弹出的浏览器窗口,有时候无法显示在所有窗口的前面(有时候又能)。我需要每次弹开浏览器,浏览器都可以显示在所有窗口的前面。
问题2:需要定位到“企业网银登录”按钮,并实现自动点击。
以上问题,仅允许使用drissionpage。谢谢

详见图片、代码及报错。

img

img


from DrissionPage import Chromium, ChromiumOptions

# 创建浏览器配置对象,指定浏览器路径
co = ChromiumOptions().set_browser_path(r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe")
browser = Chromium(addr_or_opts=co)

tab = browser.get_tab()
tab.set.window.max()   # 窗口最大化

tab.get('https://www.psbc.com/cn/')

ele=tab.ele('xpath:/html/body/div[2]/div[3]/a[2]/text()')
ele.click()

程序报错如下:
import sys; print('Python %s on %s' % (sys.version, sys.platform))
sys.path.extend(['C:\\PycharmProjects\\pythonProject2', 'C:/PycharmProjects/pythonProject2'])
PyDev console: starting.
Python 3.10.2 (tags/v3.10.2:a58ebcc, Jan 17 2022, 14:12:15) [MSC v.1929 64 bit (AMD64)] on win32
runfile('C:/PycharmProjects/pythonProject2/test3.py', wdir='C:/PycharmProjects/pythonProject2')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\PyCharm 2021.1.3\plugins\python\helpers\pydev\_pydev_bundle\pydev_umd.py", line 197, in runfile
    pydev_imports.execfile(filename, global_vars, local_vars)  # execute the script
  File "C:\PyCharm 2021.1.3\plugins\python\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:/PycharmProjects/pythonProject2/test3.py", line 13, in <module>
    ele.click()
  File "C:\PycharmProjects\pythonProject2\venv\lib\site-packages\DrissionPage\_elements\none_element.py", line 38, in __getattr__
    raise ElementNotFoundError(None, self.method, self.args)
DrissionPage.errors.ElementNotFoundError: 
没有找到元素。
method: ele()
args: {'locator': 'xpath:/html/body/div[2]/div[3]/a[2]/text()', 'index': 1, 'timeout': 10}

  • 写回答

30条回答 默认 最新

  • 就是这样,喵~ 2024-12-25 11:15
    关注

    题主您好,本回答参考AIGC,并由本人整理提供,如问题解决,望采纳;如仍有疑问,请评论回复。

    针对您在使用 DrissionPage 自动化登录中国邮政储蓄银行网站时遇到的问题,我将提供一些解决方案和代码示例。

    问题1:浏览器窗口显示在所有窗口前面

    要确保每次打开的浏览器窗口都显示在所有其他窗口前面,您可以使用 set.window.to_front() 方法。这会将当前窗口置于所有窗口的最前面。

    from DrissionPage import Chromium, ChromiumOptions
    
    # 创建浏览器配置对象,指定浏览器路径
    co = ChromiumOptions().set_browser_path(r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe")
    browser = Chromium(addr_or_opts=co)
    tab = browser.get_tab()
    tab.set.window.max()   # 窗口最大化
    tab.set.window.to_front()  # 确保窗口在最前面
    tab.get('https://www.psbc.com/cn/')
    

    问题2:定位到“企业网银登录”按钮并实现自动点击

    对于定位元素的问题,您需要确认 XPath 是否正确。根据您提供的 HTML 结构,可能需要调整 XPath 以确保正确定位到“企业网银登录”按钮。

    假设“企业网银登录”按钮的 XPath 是 //a[text()='企业网银登录'],以下是如何定位并点击该按钮的代码:

    from DrissionPage import Chromium, ChromiumOptions
    
    # 创建浏览器配置对象,指定浏览器路径
    co = ChromiumOptions().set_browser_path(r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe")
    browser = Chromium(addr_or_opts=co)
    tab = browser.get_tab()
    tab.set.window.max()   # 窗口最大化
    tab.set.window.to_front()  # 确保窗口在最前面
    tab.get('https://www.psbc.com/cn/')
    
    # 等待页面加载完成,并定位到“企业网银登录”按钮
    ele = tab.ele('xpath://a[text()="企业网银登录"]', timeout=10)
    if ele:
        ele.click()
    else:
        print("未找到‘企业网银登录’按钮")
    

    注意事项

    1. XPath 的准确性:确保 XPath 表达式准确无误,可以通过浏览器开发者工具(F12)来验证。
    2. 网络延迟:有时候由于网络延迟,页面可能没有完全加载,导致元素无法找到。可以增加 timeout 参数的值来等待更长时间。
    3. 错误处理:添加适当的错误处理机制,以便在元素未找到时能够给出明确的错误信息。

    希望这些建议能帮助您解决问题。如果还有其他问题,请随时提问。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月27日
  • 创建了问题 12月25日