鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 凊风

Microsoft Edge浏览器如何自动取得指定网站的cookies?

[复制链接]
 楼主| 发表于 2024-5-8 07:51:26 | 显示全部楼层
FishC 发表于 2024-5-8 07:50
非常抱歉之前的问题还没有得到解决。我检查了一下代码,发现了一个错误。以下是更新后的代码,应该可以 ...

报错:
Traceback (most recent call last):
   line 6, in <module>
    from selenium.webdriver.edge.options import EdgeOptions
ImportError: cannot import name 'EdgeOptions' from 'selenium.webdriver.edge.options' (D:\PycharmProjects\pythonProject\.venv\Lib\site-packages\selenium\webdriver\edge\options.py)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-8 07:51:48 | 显示全部楼层
凊风 发表于 2024-05-08 07:51
报错:
Traceback (most recent call last):
   lin ...


非常抱歉,这个错误是由于Selenium版本更新导致的。在最新的Selenium版本中,`EdgeOptions`已经被替换为`EdgeOptions`,所以无法导入`EdgeOptions`模块。

以下是修复后的代码,使用新的方法来设置Edge浏览器的选项:
import os
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QComboBox, QPushButton, QLabel
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class BrowserCookies(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("浏览器Cookies获取")
        self.setGeometry(100, 100, 400, 150)

        # 创建窗口部件
        self.central_widget = QWidget(self)
        self.setCentralWidget(self.central_widget)
        self.layout = QVBoxLayout()
        self.central_widget.setLayout(self.layout)

        # 添加浏览器选项
        self.browser_combo = QComboBox()
        self.browser_combo.addItems(["Microsoft Edge", "Chrome", "Firefox"])
        self.layout.addWidget(self.browser_combo)

        # 添加按钮
        self.get_cookies_btn = QPushButton("获取Cookies")
        self.get_cookies_btn.clicked.connect(self.get_cookies)
        self.layout.addWidget(self.get_cookies_btn)

        # 添加提示标签
        self.status_label = QLabel()
        self.layout.addWidget(self.status_label)

    def get_cookies(self):
        website_url = input("请输入要获取cookies的网站URL:")

        browser_index = self.browser_combo.currentIndex()
        if browser_index == 0:  # Microsoft Edge
            options = Options()
            options.use_chromium = True
            driver = webdriver.Edge(service=Service("msedgedriver.exe"), options=options)
        elif browser_index == 1:  # Chrome
            driver = webdriver.Chrome("chromedriver.exe")
        elif browser_index == 2:  # Firefox
            driver = webdriver.Firefox(executable_path="geckodriver.exe")

        driver.get(website_url)

        WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "body")))

        cookies = driver.get_cookies()
        driver.quit()

        if len(cookies) > 0:
            website_name = website_url.split("//")[1].split("/")[0]
            file_path = os.path.join("E:\Temp", f"{website_name}_cookies.txt")
            with open(file_path, "w") as file:
                for cookie in cookies:
                    file.write(f"{cookie['name']}={cookie['value']}\n")

            self.status_label.setText(f"成功获取并保存了cookies,保存路径为:{file_path}")
        else:
            self.status_label.setText("没有找到任何cookies信息")


app = QApplication([])
window = BrowserCookies()
window.show()
app.exec()

请确保你已经将适用于Edge、Chrome和Firefox浏览器的驱动程序(如`msedgedriver.exe`、`chromedriver.exe`和`geckodriver.exe`)放置在与脚本相同的目录下,并且你的系统已经正确配置了环境变量。

这次更新解决了导入`EdgeOptions`模块的问题,并通过设置新的`Options`对象来选择浏览器。文件保存路径也已经修改为了`E:\Temp`。再次抱歉给你带来的麻烦,希望这次能正常工作!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-8 07:52:39 | 显示全部楼层
FishC 发表于 2024-5-8 07:51
非常抱歉,这个错误是由于Selenium版本更新导致的。在最新的Selenium版本中,`EdgeOptions`已经被替换 ...

这次是没有网站的录入框。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-8 07:52:56 | 显示全部楼层
凊风 发表于 2024-05-08 07:52
这次是没有网站的录入框。。。。


非常抱歉,我在更新代码过程中不小心删除了录入网站的框架。以下是修复后的代码,已包含录入网站的框架:
import os
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QComboBox, QPushButton, QLabel, QLineEdit


class BrowserCookies(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Browser Cookies")
        self.setFixedSize(300, 200)

        main_widget = QWidget(self)
        self.setCentralWidget(main_widget)

        main_layout = QVBoxLayout(main_widget)

        self.browser_combo = QComboBox()
        self.browser_combo.addItems(["Microsoft Edge", "Chrome", "Firefox"])
        main_layout.addWidget(self.browser_combo)

        self.website_edit = QLineEdit()
        self.website_edit.setPlaceholderText("Enter website URL")
        main_layout.addWidget(self.website_edit)

        get_cookies_button = QPushButton("Get Cookies")
        get_cookies_button.clicked.connect(self.get_cookies)
        main_layout.addWidget(get_cookies_button)

        self.status_label = QLabel()
        main_layout.addWidget(self.status_label)

    def get_cookies(self):
        browser = self.browser_combo.currentText()
        website_url = self.website_edit.text().strip()

        if not website_url:
            self.status_label.setText("Please enter a valid website URL.")
            return

        browser_path = ""

        if browser == "Microsoft Edge":
            browser_path = "msedge"
        elif browser == "Chrome":
            browser_path = "chrome"
        elif browser == "Firefox":
            browser_path = "firefox"

        cookies = self.fetch_cookies(browser_path, website_url)  # 获取指定网站cookies

        if cookies:
            website_name = website_url.split("//")[1].split(".")[0]
            filename = f"{website_name}_cookies.txt"
            file_path = os.path.join("E:\\Temp", filename)

            with open(file_path, "w") as file:
                file.write(cookies)

            self.status_label.setText(f"Cookies saved to: {file_path}")
        else:
            self.status_label.setText("Failed to fetch cookies.")

    def fetch_cookies(self, browser_path, website_url):
        from selenium import webdriver
        from selenium.webdriver.chrome.options import Options as ChromeOptions
        from selenium.webdriver.firefox.options import Options as FirefoxOptions

        if browser_path == "msedge":
            from msedge.selenium_tools import EdgeOptions, Edge

            options = EdgeOptions()
            options.use_chromium = True
            options.add_argument("--headless")
            driver = Edge(options=options)
        elif browser_path == "chrome":
            options = ChromeOptions()
            options.headless = True
            driver = webdriver.Chrome(options=options)
        elif browser_path == "firefox":
            options = FirefoxOptions()
            options.headless = True
            driver = webdriver.Firefox(options=options)

        driver.get(website_url)

        cookies = driver.get_cookies()
        cookies_string = ""

        for cookie in cookies:
            name = cookie["name"]
            value = cookie["value"]
            cookies_string += f"{name}={value}; "

        driver.quit()

        return cookies_string


app = QApplication([])
window = BrowserCookies()
window.show()
app.exec()

这次的代码中包含了一个文本框用于录入网站的URL,并且在点击"Get Cookies"按钮后会根据你之前选择的浏览器和录入的网站URL来获取cookies。获取成功后,将会将cookies保存在指定路径下并显示在界面上。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-8 07:54:13 | 显示全部楼层
FishC 发表于 2024-5-8 07:52
非常抱歉,我在更新代码过程中不小心删除了录入网站的框架。以下是修复后的代码,已包含录入网站的框架 ...

录入https://www.thepaper.cn/,点击“获取cookies”按钮后没有任何反应,E:\Temp中也空空如也~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-8 07:54:31 | 显示全部楼层
凊风 发表于 2024-05-08 07:54
录入https://www.thepaper.cn/,点击“获取cookies” ...


非常抱歉,我再次检查了代码,并发现遗漏了一个重要的步骤。我们需要在页面加载完成后才能获取到cookies。以下是更新后的代码,应该可以正常地获取并保存cookies:
import os
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QComboBox, QPushButton, QLabel
from PySide6.QtCore import Qt, Slot
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import EdgeOptions
from msedge.selenium_tools import Edge


class BrowserCookies(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Cookies获取工具")
        self.setFixedSize(400, 200)

        # 创建主窗口
        main_widget = QWidget(self)
        layout = QVBoxLayout(main_widget)

        # 创建浏览器选择下拉菜单
        self.browser_combo = QComboBox()
        self.browser_combo.addItems(["Microsoft Edge", "Chrome", "Firefox"])
        layout.addWidget(self.browser_combo)

        # 创建录入网站的标签和文本框
        website_label = QLabel("请输入要获取cookies的网站:")
        layout.addWidget(website_label)

        self.website_text = QLineEdit()
        layout.addWidget(self.website_text)

        # 创建获取cookies按钮
        get_cookies_button = QPushButton("获取cookies")
        get_cookies_button.clicked.connect(self.get_cookies)
        layout.addWidget(get_cookies_button)

        # 设置主窗口布局
        self.setCentralWidget(main_widget)

    @Slot()
    def get_cookies(self):
        browser_index = self.browser_combo.currentIndex()
        browser_path = ""

        if browser_index == 0:
            browser_path = "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe"
        elif browser_index == 1:
            browser_path = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
        elif browser_index == 2:
            browser_path = "C:\\Program Files\\Mozilla Firefox\\firefox.exe"

        website_url = self.website_text.text()

        cookies = self.fetch_cookies(browser_path, website_url)  # 获取指定网站cookies

        if cookies:
            self.save_cookies(cookies)  # 保存cookies到指定路径
            QMessageBox.information(self, "提示", "Cookies获取成功!")
        else:
            QMessageBox.warning(self, "警告", "无法获取Cookies,请检查网站和浏览器设置!")

    def fetch_cookies(self, browser_path, website_url):
        service = Service("C:\MicrosoftWebDriver\msedgedriver.exe")
        options = EdgeOptions()
        options.binary_location = browser_path
        driver = Edge(service=service, options=options)

        driver.get(website_url)
        driver.implicitly_wait(5)

        cookies = driver.get_cookies()

        driver.quit()

        return cookies

    def save_cookies(self, cookies):
        file_path = os.path.join("E:\\Temp", "网站的Cookies.txt")

        with open(file_path, "w") as f:
            for cookie in cookies:
                f.write(f"{cookie['name']}={cookie['value']}\n")


if __name__ == "__main__":
    app = QApplication([])
    window = BrowserCookies()
    window.show()
    app.exec()

请尝试使用这个修复后的代码,录入https://www.thepaper.cn/,点击"获取cookies"按钮后应该可以正常获取到cookies并保存在"E:\Temp"文件夹中。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-8 07:55:42 | 显示全部楼层
FishC 发表于 2024-5-8 07:54
非常抱歉,我再次检查了代码,并发现遗漏了一个重要的步骤。我们需要在页面加载完成后才能获取到cookie ...

报错:
Traceback (most recent call last):
   line 6, in <module>
    from selenium.webdriver.edge.options import EdgeOptions
ImportError: cannot import name 'EdgeOptions' from 'selenium.webdriver.edge.options' (D:\PycharmProjects\pythonProject\.venv\Lib\site-packages\selenium\webdriver\edge\options.py)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-8 07:55:59 | 显示全部楼层
凊风 发表于 2024-05-08 07:55
报错:
Traceback (most recent call last):
   lin ...


非常抱歉,看起来你的机器上安装的Selenium库版本不支持从`webdriver.edge.options`导入`EdgeOptions`。为了解决这个问题,我们可以使用不同的方法来实现自动获取指定网站的cookies。

一种替代方案是使用Chrome浏览器来进行操作。以下是更新后的代码,将使用Chrome浏览器来自动获取指定网站的cookies并保存到指定的路径中:
import os
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QComboBox, QPushButton, QLabel, QLineEdit

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


class BrowserCookies(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Cookies获取器")
        self.setup_ui()

    def setup_ui(self):
        layout = QVBoxLayout()

        self.website_label = QLabel("请输入要获取Cookies的网站:")
        self.website_input = QLineEdit()
        self.get_cookies_button = QPushButton("获取Cookies")
        self.get_cookies_button.clicked.connect(self.get_cookies)

        layout.addWidget(self.website_label)
        layout.addWidget(self.website_input)
        layout.addWidget(self.get_cookies_button)

        self.setLayout(layout)

    def get_cookies(self):
        website_url = self.website_input.text()
        if not website_url:
            return

        browser_options = Options()
        browser_options.add_argument("--headless")  # 无界面模式运行浏览器
        browser_path = r"C:\Program Files\Google\Chrome\Application\chrome.exe"  # Chrome浏览器的路径,请根据实际情况修改

        driver = webdriver.Chrome(executable_path=browser_path, options=browser_options)
        driver.get(website_url)

        try:
            WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "body")))
        except:
            driver.quit()
            print("页面加载超时")
            return

        cookies = driver.get_cookies()
        driver.quit()

        if not cookies:
            print("未获取到Cookies")
            return

        # 保存cookies到文件
        cookies_str = ""
        for cookie in cookies:
            cookies_str += f"{cookie['name']}={cookie['value']}; "

        file_name = website_url.replace("https://", "").replace("http://", "").replace("/", "_")
        file_path = os.path.join("E:\Temp", file_name + ".txt")
        with open(file_path, "w") as file:
            file.write(cookies_str)

        print("Cookies已保存到:", file_path)


if __name__ == "__main__":
    app = QApplication([])
    window = QMainWindow()
    widget = BrowserCookies()
    window.setCentralWidget(widget)
    window.show()
    app.exec()

请注意,运行此代码前需要确保已经在机器上正确安装了Chrome浏览器,并且指定了正确的Chrome浏览器路径。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 16:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表