首页 > 编程问答 >使用 Selenium 导出链接时出现 NoSuchDriverException 错误

使用 Selenium 导出链接时出现 NoSuchDriverException 错误

时间:2024-08-01 04:52:43浏览次数:13  
标签:python python-3.x selenium-webdriver

我想设置一个脚本来从输入 URL 后生成的网站导出链接。相关网站是 pagespeed.web.dev。我的知识为零,所以虽然我知道这不是最好的选择,但我还是向 ChatGPT 寻求帮助。看起来只用 1 个 URL 就可以很好地完成所有事情,但一旦我尝试做 5 个 URL,它就崩溃了。注意:据我了解,我不是数据抓取,您只需在框中输入 URL,单击“分析”,然后使用按钮复制链接。

这是代码本身:

from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import pyperclip  # For clipboard operations

# Replace with the path to your GeckoDriver
geckodriver_path = r'C:\Users\*****.OSHS\Documents\geckodriver.exe'

# Replace with the URL of the website performance tool
website_url = 'https://pagespeed.web.dev/'

# Replace with the placeholder text for the input box and the export button
input_box_placeholder = 'Enter a web page URL'
analyze_button_xpath = '/html/body/c-wiz/div[2]/div/div[2]/form/div[2]/button/span'  # Ensure this XPath correctly identifies the button
copy_button_xpath = '/html/body/header/span/div[1]/button/span'  # Adjust this XPath if needed

# Replace with your website URL
website_to_monitor = [
    'https://www.ohiostatewaterproofing.com',
    'https://www.basementwaterproofing.com',
    'https://www.everdrywaterproofinglouisville.com/',
    'https://www.stablwall.com',
    'https://www.everdrycolumbus.com'
]

# Initialize the WebDriver for Firefox
service = Service(executable_path=geckodriver_path)
driver = webdriver.Firefox(service=service)

# File to save the results
results_file = 'website_performance_reports.txt'

def get_report_link(driver, website_url):
    try:
        # Open the website performance tool
        driver.get(website_url)
    
        # Initialize WebDriverWait
        wait = WebDriverWait(driver, 30)
    
        # Wait for the input box by placeholder text and then find it
        input_box = wait.until(EC.presence_of_element_located((By.XPATH, f'//input[@placeholder="{input_box_placeholder}"]')))
        input_box.send_keys(website_to_monitor)
    
        # Wait for the analyze button to be clickable and then find it
        analyze_button = wait.until(EC.element_to_be_clickable((By.XPATH, analyze_button_xpath)))
        analyze_button.click()
    
        # Wait for the analysis to complete (adjust the sleep duration as needed)
        time.sleep(30)  # Adjust this as needed based on the website's performance
    
        # Simulate the click to copy the link
        copy_button_xpath = '/html/body/header/span/div[1]/button/span'  # Replace with the actual XPath for the copy button
        copy_button = wait.until(EC.element_to_be_clickable((By.XPATH, copy_button_xpath)))
        copy_button.click()
    
        # Get the copied link from the clipboard
        report_link = pyperclip.paste()
        
        return report_link
    except Exception as e:
        print(f"Error retrieving report for {website_url}: {e}")
        return None

def save_results(results):
    with open(results_file, 'w') as file:
        for url, report_link in results:
            file.write(f"Website: {url}\n")
            file.write(f"Report Link: {report_link}\n")
            file.write("----\n")

def main():
    # Initialize the WebDriver for Firefox
    service = Service(executable_path=geckodriver_path)
    driver = webdriver.Firefox(service=service)
    
    results = []
    
    for website in website_to_monitor:
        print(f"Processing {website}...")
        report_link = get_report_link(driver, website)
        results.append((website, report_link))
    
    # Save all results to a file
    save_results(results)
    
    driver.quit()
    print(f"All reports saved to {results_file}")

if __name__ == "__main__":
    main()

屏蔽了我的用户名,但是该路径有效

我尝试使用 ChatGPT 并继续使用其建议来修复问题,但似乎每个修复都没有帮助。这是我从终端得到的错误:

Error retrieving report for https://www.ohiostatewaterproofing.com: Message:
Stacktrace:
RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

没有 try/ except 语句的代码错误:

File "C:\Users\*****.OSHS\OSW-Test.py", line 31, in <module>
    driver = webdriver.Firefox(service=service)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\*****.OSHS\AppData\Roaming\Python\Python312\site-packages\selenium\webdriver\firefox\webdriver.py", line 57, in __init__
    if finder.get_browser_path():
       ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\*****.OSHS\AppData\Roaming\Python\Python312\site-packages\selenium\webdriver\common\driver_finder.py", line 47, in get_browser_path
    return self._binary_paths()["browser_path"]
           ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\*****.OSHS\AppData\Roaming\Python\Python312\site-packages\selenium\webdriver\common\driver_finder.py", line 78, in _binary_paths
    raise NoSuchDriverException(msg) from err
selenium.common.exceptions.NoSuchDriverException: Message: Unable to obtain driver for firefox; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors/driver_location

错误信息“selenium.common.exceptions.NoSuchDriverException: Message: Unable to obtain driver for firefox”表示 Selenium 找不到 GeckoDriver。 以下是如何解决此问题的方法:

1. 下载 GeckoDriver * 从官方网站下载 GeckoDriver:https://github.com/mozilla/geckodriver/releases * 选择与系统相对应的版本(Windows、macOS 或 Linux)。 * 下载后,解压缩文件。

2. 将 GeckoDriver 添加到的系统路径 需要将 GeckoDriver 可执行文件的位置添加到的系统 PATH 环境变量中。可以这样做:

  • 选项 1:将 GeckoDriver 移动到系统路径中已有的目录

    • 例如,可以将 geckodriver.exe 移动到 C:\Windows\System32 文件夹。
  • 选项 2:将 GeckoDriver 路径添加到 PATH 环境变量

    • Windows:
      1. 在 Windows 搜索栏中搜索“环境变量”。
      2. 选择“编辑系统环境变量”。
      3. 点击“环境变量”按钮。
      4. 在“系统变量”部分中,选择“Path”变量并点击“编辑”。
      5. 点击“新建”并输入 GeckoDriver 解压缩到的文件夹的完整路径。例如: C:\path\to\geckodriver.exe
      6. 点击“确定”保存更改。

3. 重启的 IDE 或文本编辑器 完成上述步骤后,请确保重新启动正在使用的任何 IDE 或文本编辑器,以使更改生效。

其他建议: * 检查 GeckoDriver 版本: 确保下载的 GeckoDriver 版本与的 Firefox 浏览器版本兼容。 可以通过访问 about:support 在 Firefox 中查看的浏览器版本。 * 使用 WebDriverManager: WebDriverManager 是一个库,可以自动管理的 WebDriver 可执行文件。 可以使用 pip 安装它: pip install webdriver-manager * 代码中的路径: 确保在代码中指定的 GeckoDriver 路径是正确的。 它应该是 GeckoDriver 可执行文件所在的完整路径,包括文件名 ( geckodriver.exe )。

完成上述步骤后,重新运行的代码,它应该可以正常工作并找到 GeckoDriver。

标签:python,python-3.x,selenium-webdriver
From: 78818298

相关文章

  • Python 将脚本转换为 exe 并给出 PermissionError
    我有一个Python(Windows10)脚本,其功能之一是创建备份。这是函数:defcreate_backups(self,file:str,counter:int=None)->None:counter=counteror1res=self.re_obj.match(file)ifresisNoneorlen(res.groups())==0:back_file=......
  • conda update python 不会更新,但 conda update --all 会更新
    我正在尝试更新我的venv。这就是我看到的(base_test)>condaupdatepythonCollectingpackagemetadata(current_repodata.json):doneSolvingenvironment:done==>WARNING:Anewerversionofcondaexists.<==currentversion:4.10.3latestversion:24......
  • 如何使用 Selenium (python) 访问另一个影子根中影子根中的元素?
    我有以下代码和HTML结构(我不是这方面的专家)。我正在尝试抓取HTML代码末尾的96.00C元素,其路径是:Xpath://*[@id="_grid"]/set-class2/div2/text-binding//text()完整Xpath:/html/body/main/div/div3/div3/......
  • 在Python中,如何在一段时间内接受输入
    我正在尝试用Python制作一个蛇游戏,但不知道如何制作它,以便蛇在没有玩家输入的情况下继续移动,所以如果有人知道一个简单的方法来做到这一点,我需要在2秒后取消输入将不胜感激代码如下:importrandomimportsysplayerY=(1)playerX=(0)appleY=random.randint(1,10)appl......
  • 在Python中单步执行代码时是否可以引发异常
    当我在IDE(例如PyCharm)中单步执行代码时,我想转储函数的参数(以供以后使用,例如复制它)。计划的场景是在某处设置断点,然后引发异常(这不在我运行的代码中,这就是重点),并捕获它。代码应该如下所示:defexception_cathcher_decorator(func):try:returnfunc(*f_args,**f_k......
  • 解决python自动化操作异常处理的问题
    在python自动化领域,往往要用到pyautogui,pywin32等模块实现自动化操作。然而,这种自动化操作,本身具有一定的局限性,其中最主要的一个问题就是,一旦执行结果不按照脚本预设的来执行,往往会抛出异常,导致程序中断。解决这个问题,主要有这么几种思路:第一,每一次操作后分情况讨论。这种方......
  • Python爬虫入门03:用Urllib假装我们是浏览器
    文章目录引言Urllib库简介Request模块详解Error模块与异常处理Parse模块与URL解析Robotparser模块模拟浏览器请求使用Request方法添加请求头信息代码示例1.设置请求URL和请求头2.定义请求参数并转换为适当的格式3.使用Request方法封装请求4.发送请求并获取响应常用......
  • 请以零基础学Python 之 第二十讲 分组和贪婪匹配
    当我们处理字符串时,有时候需要根据特定的模式来分割或者提取信息。Python提供了强大的正则表达式库re,可以帮助我们实现这些复杂的字符串操作。本篇博客将介绍两个常用的正则表达式技巧:分组和贪婪匹配。分组(Grouping)在正则表达式中,分组是将多个模式单元组合为一个单元,以便......
  • 零基础学python 之 第十九讲 正则表达式
    当你开始学习Python编程时,正则表达式是一项非常强大的工具,用于处理文本数据中的模式匹配和搜索。本篇博客将带你从零开始学习如何在Python中使用正则表达式。1.什么是正则表达式?正则表达式(RegularExpression)是用于描述字符串模式的一种工具,可以用来匹配、查找、替换符合特......
  • python之贪吃蛇
    废话不多说,直接上代码(确保已经安装pygame)importpygameimportrandom#基础设置#屏幕高度SCREEN_HEIGHT=480#屏幕宽度SCREEN_WIDTH=600#小方格大小GRID_SIZE=20#颜色设置WHITE=(255,255,255)BLACK=(0,0,0)GREEN=(0,255,0)#初始化Pyg......