首頁 > 軟體

Python爬蟲中Selenium實現檔案上傳

2020-12-04 15:03:18

前言:大部分的檔案上傳功能都是用input標籤實現,這樣就完全可以把它看作一個輸入框,可以通過send_keys()指定檔案進行上傳了。

本章中用到的關鍵方法如下:

send_keys():上傳檔案或者輸入文字
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get('http://file.yiyuen.com/file/')

# 定位上傳按鈕,新增本地檔案
driver.find_element_by_name("files").send_keys('D:test.txt')
time.sleep(10)

driver.quit()

Web上本地上傳圖片,彈出的框Selenium是無法識別的,也就是說,selenium本身沒有直接的方法去實現上傳本地檔案,這裡總結了兩種上傳檔案的方式。

一、利用Robot類處理檔案上傳。

其大致流程可以為:

1、 利用selenium點選web上本地檔案的上傳按鈕;

2、 在彈出的彈框中,檔案路徑輸入框預設的是遊標的聚焦,將檔案在磁碟上的路徑通過拷貝和黏貼的方法寫上去。

3、 通過按下回車,預設觸發彈框的確定按鈕,完成檔案上傳的功能。

這裡以百度首頁的利用圖片搜尋為例:

開啟百度首頁,搜尋按鈕左側有一個照相機的圖示,點選可以選擇圖片搜尋,我們通過本地上傳圖片的過程來模擬檔案自動化上傳操作。準備條件,在百度圖片搜尋一個圖片,儲存到桌面,例如找到一個關於selenium的圖片,然後儲存在桌面,名稱為selenium.jpg。

相關實現程式碼如下:

package first;

import java.awt.Robot;

import java.awt.Toolkit;

import java.awt.datatransfer.StringSelection;

import java.awt.event.KeyEvent;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.firefox.FirefoxDriver;

public class shangchuang {

public static void main(String[] args)throws Exception {

WebDriver driver=new FirefoxDriver();

driver.manage().window().maximize();

driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS);


driver.get("https://www.baidu.com");

//指定圖片路徑

StringSelection selection=new StringSelection("C:Users你的使用者名稱Desktopselenium.jpg");

//把圖片路徑複製到剪下板

Toolkit.getDefaultToolkit().getSystemClipboard().setContents(selection, null);

System.out.println("selection"+selection);

//點選照相機這個工具

driver.findElement(By.xpath("//*/span[@class='soutu-btn']")).click();

//點選本地上傳圖片

driver.findElement(By.xpath("//*/div[@class='upload-wrap']")).click();


//新建一個Robot類的物件

Robot robot=new Robot();

Thread.sleep(1000);

//按下Ctrl+V

robot.keyPress(KeyEvent.VK_CONTROL);

robot.keyPress(KeyEvent.VK_V);

//釋放Ctrl+V

robot.keyRelease(KeyEvent.VK_CONTROL);

robot.keyRelease(KeyEvent.VK_V);

Thread.sleep(2000);

//點選回車

robot.keyPress(KeyEvent.VK_ENTER);

robot.keyRelease(KeyEvent.VK_ENTER);
}
}

二、利用AutoIt上傳檔案

以上是第一種方的實現,第二種方式是利用AutoIt這個工具。這是一個能支援桌面GUI自動化的工具,它支援指令碼語言編寫。在Selenium指令碼中如果需要AutoIt來協助這個檔案上傳功能,大概步驟是這樣的:

1. Selenium點選web產品上的檔案上傳按鈕,彈窗上傳框。

2.執行AutoIt實現準備好的指令碼檔案,這個指令碼檔案寫了關於上傳什麼檔案的一個.exe檔案。

在一切測試工作之前,我們先下載和安裝AutoIt。

1)開啟AutoIt的官網下載地址

https://www.autoitscript.com/site/autoit/downloads/

2)點選下載zip,當然也可以下載Editor。

解壓得到的效果如圖:

3)點選SciTe資料夾,我們開啟指令碼編輯器。雙擊SciTE.exe

4)開啟百度圖片上傳視窗,同時開啟AutoIt 指令碼編輯器和元素定位器。拖動元素定位器上那個靶點形狀按鈕到檔案上傳彈窗,能夠捕獲到一些元素資訊。

5)在AutoIt指令碼編輯器裡輸入如下指令碼,綠色部分為解釋的,不需要寫。

6)編譯成一個.exe檔案

先儲存到本地,例如預設路徑儲存,名稱為UploadFile.au3,然後在AutoIt指令碼編輯器中點選Tools選單,選擇compile,會在同路徑下生成一個UploadFile.exe的檔案,待會在Selenium指令碼要使用。

7)Selenium指令碼執行UploadFile.exe檔案,觀察檔案是否上傳。

package first;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.firefox.FirefoxDriver;

public class AutoIt {

public static void main(String[] args) throws Exception{

WebDriver driver=new FirefoxDriver();

driver.manage().window().maximize();

driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS);


driver.get("http://www.baidu.com");

//點選照相機這個工具

driver.findElement(By.xpath("//*/span[@class='soutu-btn']")).click();

//點選本地上傳圖片

driver.findElement(By.xpath("//*/div[@class='upload-wrap']")).click();

// 執行桌面的AutoIt封裝的指令碼

Runtime.getRuntime().exec("C:Users你的使用者名稱DesktopUploadFile.exe");

}

}

我用的是火狐62,最終的效果如圖所示:

Selenium文集傳送門:

標題 簡介
Python爬蟲 - Selenium(1)安裝和簡單使用 詳細介紹Selenium的依賴環境在Windows和Centos7上的安裝及簡單使用
Python爬蟲 - Selenium(2)元素定位和WebDriver常用方法 詳細介紹定位元素的8種方式並配合點選和輸入、提交、獲取斷言資訊等方法的使用
Python爬蟲 - Selenium(3)控制瀏覽器的常用方法 詳細介紹自定義瀏覽器視窗大小或全螢幕、控制瀏覽器後退、前進、重新整理瀏覽器等方法的使用
Python爬蟲 - Selenium(4)設定啟動項引數 詳細介紹Selenium啟動項引數的設定,其中包括無介面模式、瀏覽器視窗大小設定、瀏覽器User-Agent (請求頭)等等
Python爬蟲 - Selenium(5)滑鼠事件 詳細介紹滑鼠右擊、雙擊、拖動、滑鼠懸停等方法的使用
Python爬蟲 - Selenium(6)鍵盤事件 詳細介紹鍵盤的操作,幾乎包含所有常用按鍵以及組合鍵
Python爬蟲 - Selenium(7)多視窗切換 詳細介紹Selenium是如何實現在不同的視窗之間自由切換
Python爬蟲 - Selenium(8)frame/iframe表單巢狀頁面 詳細介紹如何從當前定位的主體切換為frame/iframe表單的內嵌頁面中
Python爬蟲 - Selenium(9)警告框(彈窗)處理 詳細介紹如何定位並處理多類警告彈窗
Python爬蟲 - Selenium(10)下拉框處理 詳細介紹如何靈活的定位並處理下拉框
Python爬蟲 - Selenium(11)檔案上傳 詳細介紹如何優雅的通過send_keys()指定檔案進行上傳
Python爬蟲 - Selenium(12)獲取登入Cookies,並新增Cookies自動登入 詳細介紹如何獲取Cookies和使用Cookies進行自動登入
Python爬蟲 - Selenium(13)設定元素等待 詳細介紹如何優雅的設定元素等待時間,防止程式執行過快而導致元素定位失敗
Python爬蟲 - Selenium(14)視窗截圖 詳細介紹如何使用視窗截圖
Python爬蟲 - Selenium(15)關閉瀏覽器 詳細介紹兩種關閉視窗的區別

到此這篇關於Python爬蟲中Selenium實現檔案上傳的文章就介紹到這了,更多相關Selenium 檔案上傳內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com