求指导为何selenium定位集思录62行报错

求指导为何selenium定位集思录62行报错,如图,非常感谢

img

img

提示的报错信息是编码不对,实际上应该是你写的这个path路径定位不到这个元素,你可以用鼠标右键直接复制xpath路径试一下。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7781961
  • 这篇博客也不错, 你可以看下Selenium之id定位
  • 除此之外, 这篇博客: 万字攻略全面了解selenium_selenium教程中的 8 处理弹窗 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    通过上面7.5单选的示例代码在运行的时候就会碰到有alert弹窗提示,下面我们就详细介绍alert提示弹窗、确认confirm弹窗、输入内容prompt弹窗。顺便说下核心方法主要有:

    text()                 # 获取文本值

    accept()            # 点击“确认”

    dismiss()           # 点击“取消”或者是关闭叉掉对话框

    send_keys()      # 输入文本值 ,仅限于prompt,在alert和confirm上没有输入框

    下面直接上示例,在我们本地运行 alert.html ,代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>selenium alert</title>
    </head>
    <body>
        <a href="javascript:alert('提示框')" id="alert">
        	test_Alert
        </a>
        <br>
        <a href="javascript:confirm('确认框,如:真的要删除吗?')" id="confirm">
        	test_Confirm
        </a>
        <br>
        <a href="javascript:var why = prompt('输入内容框,如:请输入内容?');document.write(why) " id="prompt">
        	test_Prompt
        </a>
        <br>
    </body>
    </html>

    然后,我们对不同弹窗间的处理:

    import time
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.common.by import By
    
    # 初始化浏览器,并打开本地文件
    browser = webdriver.Chrome(
        service=Service(r'D:\software\PyCharmLib\chromedriver.exe'))
    browser.get('file://C:/Users/root/Desktop/alert.html')
    time.sleep(1)
    # 用于提示
    def test_alert():
        # 定位元素
        browser.find_element(By.ID, 'alert').click()
        # 切换到alert
        alert = browser.switch_to.alert
        print(alert.text)   # 打印alert内容
        time.sleep(3)
        alert.accept()      # 相当于点击确认按钮
    
    # 用于确认
    def test_confirm():
        # 定位元素
        browser.find_element(By.ID, 'confirm').click()
        # 切换到alert
        confirm = browser.switch_to.alert
        # 打印alert内容
        print(confirm.text)
        time.sleep(3)
        # 相当于点击确认按钮
        confirm.accept()
        # 相当于点击取消按钮
        # confirm.dismiss()
    
    # 用于输入内容
    def test_prompt():
        # 定位元素
        browser.find_element(By.ID, 'prompt').click()
        # 切换到alert
        prompt = browser.switch_to.alert
        print(prompt.text)  # 打印alert内容
        # 输入文本
        prompt.send_keys('记得点个赞!!!')
        time.sleep(3)
        prompt.accept()  # 相当于点击确认按钮
        time.sleep(3)
        # confirm.dismiss()      # 相当于点击取消按钮
    
    test_alert()
    test_confirm()
    test_prompt()
    
  • 您还可以看一下 杨雅洲老师的python数据分析基础课程中的 青岛短租数据爬取丨selenium工具包小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    非常抱歉,我无法看到您提供的报错信息截图,所以无法给出具体的解决方案。

    不过,一般来说,使用selenium进行定位时出现报错,可能是以下原因之一:

    1. 定位表达式有误:请检查您使用的定位语句是否正确。可以尝试手动在浏览器中定位该元素并使用浏览器提供的开发者工具(一般按F12可打开)来查看其定位表达式是否正确。如果浏览器能够正确地定位该元素,那么您也可以尝试复制相应的表达式并使用selenium进行定位。

    2. 元素未加载或加载不完全:有时候页面中的元素需要等待一段时间才能被加载出来,如果selenium在未等待其加载完全的情况下进行定位,就会报错。您可以尝试使用selenium提供的等待方式,如显式等待或隐式等待,来等待页面元素的加载。

    3. 操作过于频繁:如果您的测试用例过于频繁地操作页面,可能会导致页面反应不过来,无法正确地加载并定位元素。您可以尝试适当减少测试用例中的操作次数,或者在操作之间增加适当的等待时间,以便让页面有足够的时间来响应您的操作。

    如果以上方法均不能解决您的问题,您可以将报错信息以文本形式发送给我,我将会尽力为您解答。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^