網絡爬蟲學習:借助DeepSeek完善爬蟲軟件,實現模擬鼠標右鍵點擊,將鏈接另存為本地文件

一、前言

最近幾個月里,我一直在學習網絡爬蟲方面的知識,每有收獲都會將所得整理成文發布,不知不覺已經發了7篇日志了:

網絡爬蟲學習:從百度搜索結果抓取標題、鏈接、內容,并保存到xlsx文件中

網絡爬蟲學習:從新浪新聞搜索抓取所有新聞結果的標題、鏈接、內容、來源、時間

網絡爬蟲學習:POST方式從騰*新聞搜索結果獲取標題、鏈接、內容、來源、時間

網絡爬蟲學習:多線程爬取,并將結果更新到主線程UI上

網絡爬蟲學習:應用selenium從搜*狐搜索爬取新聞結果的數據

網絡爬蟲學習:應用selenium獲取Edge瀏覽器版本號,自動下載對應版本msedgedriver,確保Edge瀏覽器順利打開

網絡爬蟲學習:借助DeepSeek完善爬蟲軟件,增加停止任務功能

這兩天,我又解決了模擬鼠標右鍵點擊的問題,特記錄以備忘。

二、問題描述

在完成第一個爬蟲軟件之后,我又開始制作第二個爬蟲軟件,這個軟件是為我自己準備的一個專用工具,目的是從特定的web應用中導出查詢到的數據。在這個應用查詢數據后,要點擊頁面中的導出按鈕才能將數據導出。點擊按鈕后在頁面上會展示一個超鏈接,需要點擊這個超鏈接后才能將數據文件保存到本地電腦中。

這個鏈接既可以用鼠標左鍵點擊彈出瀏覽器的下載框進行下載,也可以用鼠標右鍵點擊后選擇“將鏈接另存為”菜單項,彈出Windows系統的“另存為”窗口,進行下載。

由于我還不會模擬鼠標右鍵點擊,于是決定選擇往這個方向研究。

注意:我開發的爬蟲軟件調用的Edge瀏覽器,鼠標右鍵點擊彈出的菜單中,顯示的是“將鏈接另存為”,在其它的瀏覽器(如360瀏覽器),顯示的菜單名有所不同。

三、借助DeepSeek獲取解決辦法

我之前已經嘗試過借助DeepSeek來解決問題了,效果還不錯,這次也一樣,將問題拋給DeepSeek,讓它幫我想辦法。這次我同樣是問了3次,就解決了問題。

第1問:“我正在嘗試用selenium做一個登錄網頁并進行自動操作的小軟件,軟件需要實現模擬鼠標右鍵點擊,并選中菜單中的“將鏈接另存為”菜單項,請問我該怎么實現此功能。”

稍候數秒,DeepSeek給出了答案,建議我使用SeleniumActionChains模擬右鍵點擊,然后使用PyAutoGUIAutoIt等工具選擇“將鏈接另存為”菜單項。DeepSeek給出的示例用的PyAutoGUI庫,這個庫剛好我的電腦里也裝了,只是我對這個庫不了解一直沒用過,這次我便用照著示例修改了我的軟件,確實實現了模擬右鍵點擊功能。

右鍵點擊是實現了,菜單也出現了,但是示例中出現的 pyautogui.press('down')??要根據需要按多次的操作,這種死板的操作我不喜歡,因為右鍵菜單可能會因為安裝了一些插件后發生變化,如果在不同的電腦上,因為安裝的插件不同,“將鏈接另存為”菜單項的位置也不同,那該怎么辦呢?

于是我提出第2問:“此方法經過測試有用,不過我有一個新的問題。就是這個方法只適用于菜單項目固定的情況,如果因為安裝了新的插件導致“將鏈接另存為”菜單項位置發生變化,又該怎么辦?

DeepSeek提供了3個方案,其中有兩個方案都使用到了PyAutoGUI庫,我選擇了方案1。

使用方案1,需要手工將瀏覽器右鍵菜單項截圖,然后從中剪裁出“將鏈接另存為”菜單項并保存為png文件(文件名save_link_as.png)。

實現點擊“將鏈接另存為”菜單項后就彈出Windows系統的“另存為”窗口了。但接下來怎么做呢,可能DeepSeek不清楚點擊“將鏈接另存為”菜單項,會出現怎樣的情形,因此它沒有猜到我接著要干啥。

無奈,我只得提出第3問:“感謝你的答案,我已經能夠實現模擬右鍵并點擊“將鏈接另存為”菜單項了,不過接下來我又遇到了一個新問題。點擊“將鏈接另存為”菜單項后,會彈出“另存為”窗口,需要用戶在這個窗口中選擇文件保存的路徑,并命名文件名稱。這些操作我都希望通過軟件自動進行。我想在軟件中設置好文件路徑和文件名,當彈出“另存為”窗口后,通過軟件將文件路徑和文件名填到窗口對應位置,然后點擊“保存”按鈕,完成文件的保存操作。

DeepSeek又給了3個方法,方法1又用到了PyAutoGUI庫,當然選它啦,。

四、功能實現

借助DeepSeek的答案,我實現了模擬右鍵點擊,將鏈接指向的文件保存到了本地,這里以右鍵點擊百度首頁中的logo圖標,將其指向的htm文件保存到本地為示例,說明功能的實現(完整代碼見本文第五部分):

1.設置文件將要保存的路徑及文件名。

htm文件將要保存在當前工作目錄下的results子目錄中,事先將路徑和文件名設置好。

# 獲取當前工作路徑
work_path = os.getcwd()
print(work_path)
# 檢查當前工作路徑下是否有results子目錄,如沒有就創建
subdirectory_name = os.path.join(work_path, "results")
if not os.path.exists(subdirectory_name):os.makedirs(subdirectory_name)
# 生成文件路徑
file_path = os.path.join(subdirectory_name, "baidu_logo.htm")
print(file_path)

2.配置瀏覽器

我選擇的系統自帶的Edge瀏覽器,同時提前下載了對應版本的驅動文件并保存在了工作目錄下的drivers子目錄中。

# 配置 Selenium 瀏覽器驅動
path_to_executable = os.path.abspath("drivers/msedgedriver.exe")  # 指定驅動路徑(驅動已提前下載到當前工作路徑子目錄drivers下)
service = Service(executable_path=path_to_executable)
driver = webdriver.Edge(service=service)
# driver.maximize_window()  # 全屏
driver.set_window_size(1200, 800)  # 指定分辨率

關于如何下載驅動文件msedgedriver.exe,詳見我的另外一篇日志。

網絡爬蟲學習:應用selenium獲取Edge瀏覽器版本號,自動下載對應版本msedgedriver,確保Edge瀏覽器順利打開

3.打開百度首頁,并選中logo圖片

# 在瀏覽器中打開百度首頁
driver.implicitly_wait(5)
driver.get("https://www.baidu.com")
time.sleep(3)# 選中百度首頁中的logo圖片
element = driver.find_element(By.XPATH, "//*[@id='lg']/img")

4.通過selenium庫的ActionChains類模擬鼠標右鍵點擊

注意:由于軟件運行速度很快,而瀏覽網頁響應較慢,因此在代碼的多個地方插入了time.sleep方法,進行延遲,以免頁面還沒有顯示,就執行了相關的點擊之類的代碼。延遲的時間需要根據網絡情況進行調整。

# 創建ActionChains對象
action = ActionChains(driver)
# 模擬鼠標右鍵點擊
action.context_click(element).perform()
# 等待菜單彈出
time.sleep(1)

5.將百度logo圖片鏈接的htm文件保存到本地

# 指定“將鏈接另存為”菜單項的圖片文件
template_image = 'save_link_as.png'  # 此圖片文件需要手工截取Edge瀏覽器右鍵菜單中的“將鏈接另存為”菜單項,保存為圖片文件
# 使用圖像識別查找菜單項,查找圖片在屏幕上的位置
location = pyautogui.locateCenterOnScreen(template_image, confidence=0.8)  # 需要OpenCV支持
if location:print(f"找到菜單項,位置為: {location}")time.sleep(3)# 點擊菜單項pyautogui.click(location)# 等待“另存為”窗口彈出time.sleep(1)# 模擬按鍵 Shift + Home(選中所有文本)pyautogui.hotkey('shift', 'home')# 模擬按鍵 Delete(刪除選中的文本)pyautogui.press('delete')# 定位“文件名”輸入框并填寫文件路徑和文件名pyautogui.write(file_path)time.sleep(3)# 按下回車鍵確認保存pyautogui.press('enter')time.sleep(1)# 點擊“保存”按鈕,使用圖像識別定位按鈕位置save_button_location = pyautogui.locateCenterOnScreen('save_button.png')  # 此圖片文件需要手工截取“另存為”窗口中的“保存”按鈕,保存為圖片文件if save_button_location:pyautogui.click(save_button_location)
else:print("未找到菜單項")

這部分的代碼中有兩個png文件,都是需要提前準備的。

save_link_as.png:需要手工將瀏覽器右鍵菜單項截圖,然后從中剪裁出“將鏈接另存為”菜單項并保存為png文件。

save_button.png:需要手工將“另存為”窗口截圖,然后從中剪裁出“保存”按鈕并保存為png文件。

最終的實現效果如下:

1.打開百度首頁模擬鼠標右鍵點擊logo圖片。

2.點擊“將鏈接另存為”菜單項,彈出“另存為”窗口,將事先設置好的路徑和文件名填入窗口的文件名文本框中。

3.htm已保存到本地

五、代碼展示

最后放上示例代碼供參考,可以直接運行。

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.action_chains import ActionChains
import pyautogui
import os# 獲取當前工作路徑
work_path = os.getcwd()
print(work_path)
# 檢查當前工作路徑下是否有results子目錄,如沒有就創建
subdirectory_name = os.path.join(work_path, "results")
if not os.path.exists(subdirectory_name):os.makedirs(subdirectory_name)
# 生成文件路徑
file_path = os.path.join(subdirectory_name, "baidu_logo.htm")
print(file_path)# 配置 Selenium 瀏覽器驅動
path_to_executable = os.path.abspath("drivers/msedgedriver.exe")  # 指定驅動路徑(驅動已提前下載到當前工作路徑子目錄drivers下,相關方法見我的另外一篇日志)
service = Service(executable_path=path_to_executable)
driver = webdriver.Edge(service=service)
# driver.maximize_window()  # 全屏
driver.set_window_size(1200, 800)  # 指定分辨率# 在瀏覽器中打開百度首頁
driver.implicitly_wait(5)
driver.get("https://www.baidu.com")
time.sleep(3)# 選中百度首頁中的logo圖片
element = driver.find_element(By.XPATH, "//*[@id='lg']/img")
# 創建ActionChains對象
action = ActionChains(driver)
# 模擬鼠標右鍵點擊
action.context_click(element).perform()
# 等待菜單彈出
time.sleep(1)# 使用PyAutoGUI模擬右鍵點擊,彈出菜單后,選擇“將鏈接另存為”菜單項
# 注意:PyAutoGUI的坐標和操作依賴于屏幕分辨率
# 指定“將鏈接另存為”菜單項的圖片文件
template_image = 'save_link_as.png'  # 此圖片文件需要手工截取Edge瀏覽器右鍵菜單中的“將鏈接另存為”菜單項,保存為圖片文件
# 使用圖像識別查找菜單項,查找圖片在屏幕上的位置
location = pyautogui.locateCenterOnScreen(template_image, confidence=0.8)
if location:print(f"找到菜單項,位置為: {location}")time.sleep(3)# 點擊菜單項pyautogui.click(location)# 等待“另存為”窗口彈出time.sleep(1)# 模擬按鍵 Shift + Home(選中所有文本)pyautogui.hotkey('shift', 'home')# 模擬按鍵 Delete(刪除選中的文本)pyautogui.press('delete')# 定位“文件名”輸入框并填寫文件路徑和文件名pyautogui.write(file_path)time.sleep(3)# 按下回車鍵確認保存pyautogui.press('enter')time.sleep(1)# 點擊“保存”按鈕,使用圖像識別定位按鈕位置save_button_location = pyautogui.locateCenterOnScreen('save_button.png')  # 此圖片文件需要手工截取“另存為”窗口中的“保存”按鈕,保存為圖片文件if save_button_location:pyautogui.click(save_button_location)
else:print("未找到菜單項")time.sleep(2)
driver.quit()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70361.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70361.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70361.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Arduino 第十六章:pir紅外人體傳感器練習

Arduino 第十六章:PIR 傳感器練習 一、引言 在 Arduino 的眾多有趣項目中,傳感器的應用是非常重要的一部分。今天我們要學習的主角是 PIR(被動紅外)傳感器。PIR 傳感器能夠檢測人體發出的紅外線,常用于安防系統、自動…

CV -- YOLOv8 圖像分割(GPU環境)

目錄 參考視頻: 標注 JSON轉為TXT 訓練 驗證 參考視頻: 使用 Yolov8 自定義數據集進行圖像分割_嗶哩嗶哩_bilibili 標注 數據集: 我使用的是一些蘋果數據集,可以在我的csdn資源中下載: https://download.csdn.net/do…

深入理解 lua_KFunction 和 lua_CFunction

在 Lua C API 中,lua_KFunction 和 lua_CFunction 是兩個核心概念,尤其在處理協程和 C 函數擴展時扮演著至關重要的角色。lua_CFunction 作為一種 C 函數類型,允許開發者將 C 函數注冊到 Lua 環境中,使得這些 C 函數可以在 Lua 腳本中被調用,進而實現 Lua 的功能擴展。而 …

基于微信小程序的電影院訂票選座系統的設計與實現,SSM+Vue+畢業論文+開題報告+任務書+指導搭建視頻

本系統包含用戶、管理員兩個角色。 用戶角色:注冊登錄、查看首頁電影信息推薦、查看電影詳情并進行收藏預定、查看電影資訊、在線客服、管理個人訂單等。 管理員角色:登錄后臺、管理電影類型、管理放映廳信息、管理電影信息、管理用戶信息、管理訂單等。…

【Linux網絡編程】應用層協議HTTP(請求方法,狀態碼,重定向,cookie,session)

🎁個人主頁:我們的五年 🔍系列專欄:Linux網絡編程 🌷追光的人,終會萬丈光芒 🎉歡迎大家點贊👍評論📝收藏?文章 ? Linux網絡編程筆記: https://blog.cs…

Vue3 打造 Windows 桌面個性高效組件工具

軟件介紹 Widgets 這款基于 Vue3 構建的開源 Windows 桌面小部件工具超實用。 其多樣化組件庫涵蓋超 20 種,從倒計時、打工進度等實用工具,到抖音熱榜等實時資訊組件應有盡有,各組件獨立運行,滿足多場景需求。 高度自定義布局支持…

Tailwind CSS 和 UnoCSS簡單比較

一、Tailwind CSS 和 UnoCSS簡介 Tailwind CSS 和 UnoCSS 都是流行的原子化 CSS 框架,它們有很多相似之處,但也存在一些明顯的區別,以下從多個方面對它們進行比較: 1. 基本概念和原理 Tailwind CSS 是最早提出并推動原子化 CSS…

什么是語料清洗、預訓練、指令微調、強化學習、內容安全; 什么是megatron,deepspeed,vllm推理加速框架

什么是語料清洗、預訓練、指令微調、強化學習、內容安全 目錄 什么是語料清洗、預訓練、指令微調、強化學習、內容安全語料清洗預訓練指令微調強化學習內容安全什么是megatron,deepspeed,vllm推理加速框架語料清洗 語料清洗是對原始文本數據進行處理的過程,旨在去除數據中的…

C++(23):lambda可以省略()

C越來越多的使用了lambda&#xff0c;C23也進一步的放寬了對lambda的限制&#xff0c;這一次&#xff0c;如果lambda沒有參數列表&#xff0c;那么可以直接省略掉()&#xff1a; #include <iostream> using namespace std;void func() {auto f []{cout<<"in…

自制操作系統分享第四天

今天要做什么&#xff1f; &#xff08;1&#xff09;分享 我們上面已經說過INT 0x13這種指令&#xff08;調用BIOS的INT指令&#xff09;&#xff0c;我們知道這是調用BIOS的0x13函數&#xff0c;但還不明白它到底是干什么用的&#xff1a; AH 0x02;# 讀盤 AH 0x03;# 寫…

DeepSeek預測25考研分數線

25考研分數馬上要出了。 目前&#xff0c;多所大學已經陸續給出了分數查分時間&#xff0c;綜合往年情況來看&#xff0c;每年的查分時間一般集中在2月底。 等待出成績的日子&#xff0c;學子們的心情是萬分焦急&#xff0c;小編用最近爆火的“活人感”十足的DeepSeek幫大家預…

Android 動態加入Activity 時 manifest 注冊報錯解決。使用manifestPlaceholders 占位

需求如下&#xff1a; 項目 測試demo 有多個渠道&#xff0c;部分渠道包含支付功能&#xff0c;在主測試代碼外&#xff0c;需要一個單獨 Activity 調用測試代碼。 MainActivityPayActivity渠道A包含不包含渠道B包含包含 因為支付功能需要引入對應的 moudule&#xff0c;因此…

FRRouting配置與OSPF介紹,配置,命令,bfd算法:

文章目錄 1、frrouting的配置&#xff1a;2、ospf2.1、檢測和維護鄰居關系2.2、ospfDR和BDR2.3、odpf鄰居表2.4、ospf常用命令2.5、bfd配置 1、frrouting的配置&#xff1a; sudo service zebra start sudo service ospfd start telnet localhost 2604 en configure termina…

Perplexity 開源DeepSeek-R1 模型新版本 R1-1776

引言 在人工智能領域&#xff0c;模型的更新迭代如同科技界的時尚潮流&#xff0c;不斷推陳出新。今天&#xff0c;我們要介紹的是Perplexity AI開源的新版推理模型——DeepSeek-R1 1776。這個版本不僅繼承了前代的強大性能&#xff0c;還在公正性和準確性上進行了顯著提升。那…

關系中出現這10個信號,離分手就不遠了(愛情友情都適用)

親密關系的隱形裂痕 在一個陽光明媚卻略顯蕭瑟的午后&#xff0c;咖啡杯里的咖啡已經涼透。小李盯著手機屏幕&#xff0c;那些曾經熱烈的對話記錄現在看起來如此陌生&#xff0c;仿佛隔著一層薄薄的霧。她終于意識到&#xff0c;這段關系已經悄然走向盡頭。 親密關系是一場精心…

馬斯克Grok3使用入口和訂閱教程(白嫖150刀API額度)

文章目錄 馬斯克Grok3使用入口和訂閱教程(白嫖150刀API額度)前言介紹如何訂閱X上Premium服務國內訂閱X的Premium教程 白嫖教程小結 馬斯克Grok3使用入口和訂閱教程(白嫖150刀API額度) 前言介紹 重點&#xff1a;Grok 3僅對X上的Premium用戶開放。你需要訂閱X的Premium服務才能…

相機開發調中廣角和焦距有什么不一樣

在相機中,調整廣角和調整焦距是兩個不同的概念,它們的作用和實現方式也不同。以下是兩者的詳細對比和解釋: 1. 調整廣角 定義 廣角是指相機的視野范圍(Field of View, FOV)。調整廣角實際上是調整相機的視野范圍。更廣的視野意味著可以捕捉到更多的場景內容(更寬的畫面)…

讓大模型幫我設計crnn網絡及可運行demo,gpt4o豆包qwendeepseek-r1

prompt 使用 crnn 提取圖像特征&#xff0c;給出圖像好壞的二分類結果&#xff0c;寫清楚代碼備注&#xff0c;注釋清楚向量維度大小&#xff0c;并給出一個可運行的 demo1、GPT-4o 以下是一個使用 CRNN&#xff08;Convolutional Recurrent Neural Network&#xff09;提取圖…

DeepBI助力跨境電商打破流量壟斷:AI驅動的亞馬遜廣告投放新打法

#亞馬遜廣告優化# 親愛的亞馬遜跨境電商賣家們&#xff0c;是否曾因亞馬遜的廣告打法不清晰&#xff0c;或是糾結于亞馬遜廣告費用過高&#xff0c;或是為亞馬遜電商廣告怎么投放合適的問題而苦惱&#xff1f;在競爭激烈的亞馬遜市場中&#xff0c;廣告投放效果平平&#xff0…

前端基礎入門:HTML、CSS 和 JavaScript

在現代網頁開發中,前端技術扮演著至關重要的角色。無論是個人網站、企業官網,還是復雜的 Web 應用程序,前端開發的基礎技術 HTML、CSS 和 JavaScript 都是每個開發者必須掌握的核心技能。本文將詳細介紹這三者的基本概念及其應用 一、HTML——網頁的骨架 HTML(HyperText …