91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中selenium打包靜態網頁并下載的方法

發布時間:2020-08-13 11:14:30 來源:億速云 閱讀:392 作者:小新 欄目:開發技術

這篇文章主要介紹了Python中selenium打包靜態網頁并下載的方法,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

需求:單純的將page.source寫入文件的方式,會導致一些圖片無法顯示,對于google瀏覽器,直接將頁面打包下載成一個mhtml格式的文件,則可以進行離線下載。對應python selenium 微信公眾號歷史文章隨手一點就返回首頁?郁悶之下只好將他們都下載下來。:https://www.jb51.net/article/193111.htm

遇到的問題:

1、單純使用webdriver.ActionChains無法完成下載動作,未能操作windows窗口。

2、沒有找到相關能直接下載.mhtml的命名接口。

3、pywin32置頂窗口的使用不順利。

解決思路:

1、使用selnium打開瀏覽器,不要操作,讓其保持置頂

2、使用pyautogui、pyperclip操作鍵盤、鼠標、剪切板進行下載文件。

準備材料:

需要將自動化操作的一些圖片截取下來,以作為后期圖片匹配使用。

Python中selenium打包靜態網頁并下載的方法

實現:

1、打開爬取好的鏈接,遍歷所有需要下載的頁面

# 讀取文件
filename = r'data/01 爬取微信公眾號歷史文章/urls 二律背反的一燈如豆-out.xlsx'
df = pd.read_excel(filename,dtype=object)
df = df.reindex(columns=['日期', '標題', '原創', '地址','完成情況','儲存地址'])
#df = df.head(5)
dfsel = (df['標題'] !='隨文') & (df['完成情況'] != 1)
save_folder = r"I:\code\python\data\01 爬取微信公眾號歷史文章\01 二律背反的一燈如豆" + "\\"
# 設置保存格式為 mhtml,減少要操作文件保存下拉框的情況
options = webdriver.ChromeOptions()
options.add_argument('--save-page-as-mhtml')

# 啟動瀏覽器
driver = webdriver.Chrome(options=options)
wait = WebDriverWait(driver,10)

df.loc[dfsel,"完成情況"],df.loc[dfsel,"儲存地址"] = zip(*df[dfsel].apply(download_mhtml_with_not_check, axis=1,args=(driver,wait)))

2、編寫相關下載頁面函數

# 在timeout秒內,返回中心值,間隔時長time_setp
# 封裝一個pyautogui限時查找函數
#
def finde_gui_element(png,timeout = 5,time_setp=0.2):
 i = 1
 if timeout <=0 : timeout = 5
 if time_setp <=0 : time_setp = 0.2
 while True:
  if i > timeout/time_setp: return None
  center = pyautogui.locateCenterOnScreen(png,grayscale=False,confidence=0.9)
  if center == None:
   time.sleep(0.2)
  else:
   return center
  i = i + 1

主要自動化操作代碼:

def download_mhtml_with_not_check(x,driver,wait):
 name = ''
 try:
  url = str(x['地址'])
  driver.get(url)
  # 獲取瀏覽器標題,用于檢測是否是置頂頁
  wait.until(EC.presence_of_element_located((By.XPATH,'//h3[@id="activity-name"]')))
  title = driver.find_element_by_xpath('//h3[@id="activity-name"]').text
  print('no:',x.name,'url:',url,'title:',title)
  wait.until(EC.presence_of_element_located((By.XPATH,'//div[@id="page-content"]')))
  
  #進入下載
  pyautogui.hotkey('ctrl', 's')
  # 等待一下對話框彈出
  time.sleep(1)
  bt = finde_gui_element(r'data\png\save.png') #查找保存按鍵
  if bt == None:
   return (0,'')
  else:
   # 根據標題組合成具體路徑
   name = save_folder + ' ' + title + '.mhtml'
   #print(name)
   pyperclip.copy(name)
   pyautogui.hotkey('ctrl', 'v')
   time.sleep(0.1)
   pyautogui.hotkey('Enter')
   # 檢查是否彈出另存為
   bt = finde_gui_element(r'data\png\confirmsaveas.png',timeout=0.5)
   if bt != None:
    # 說明出現重復明明,點擊覆蓋
    pyautogui.hotkey('Tab')
    pyautogui.hotkey('Enter')
    return (1,name)
   bt = finde_gui_element(r'data\png\cancle.png',timeout=0.5)
   if bt != None:
    #還愛,說明出現了一些異常
    pyautogui.hotkey('esc')
    pyautogui.hotkey('esc')
    pyautogui.leftClick(bt)
    return (-1,name)
  # 加多一個esc防止出現窗口還在
  pyautogui.hotkey('esc')
 except Exception as e:
  print(str(e))
  return (-2,name)
 return (1,name)

最后寫入excel:

Python中selenium打包靜態網頁并下載的方法

通過vba代碼,將單元格地址添加上超鏈接:

Option Explicit

Sub add_hype()
 Dim ws As Worksheet, arr As Variant, i As Long
 Set ws = ThisWorkbook.Worksheets(1)
 arr = ws.UsedRange.Value
 ws.Cells.Hyperlinks.Delete
 For i = 2 To UBound(arr)
  If CStr(arr(i, 2)) = "隨文" Then
  
  Else
   If CStr(arr(i, 5)) = "1" Then
    ws.Hyperlinks.Add Anchor:=ws.Cells(i, 6), Address:=CStr(arr(i, 6))
   End If
  End If
 Next i
 
End Sub

完成。

不足之處:

通過autogui操作,難免會遇到彈窗的情況,需要增加活動窗體置頂,但是一直沒有找到有效的方法。

感謝你能夠認真閱讀完這篇文章,希望小編分享Python中selenium打包靜態網頁并下載的方法內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

仲巴县| 武城县| 枣阳市| 微山县| 泸西县| 南阳市| 晋中市| 陆良县| 汕尾市| 长岭县| 五原县| 威远县| 滕州市| 麟游县| 天长市| 邻水| 岳西县| 南宁市| 府谷县| 德令哈市| 右玉县| 霍邱县| 马鞍山市| 清丰县| 东乡县| 九龙坡区| 德江县| 梁平县| 衡阳市| 磐石市| 阳曲县| 九龙县| 邵阳市| 忻州市| 察隅县| 德州市| 紫阳县| 武乡县| 阳江市| 剑川县| 东丽区|