Python中Selenium上傳文件得幾種方式

    目錄

    Selenium 封裝了現(xiàn)成得文件上傳操作。但是隨著現(xiàn)代前端框架得發(fā)展,文件上傳得方式越來(lái)越多樣。而有一些文件上傳得控件,要做自動(dòng)化控制會(huì)更復(fù)雜一些,這篇內(nèi)容主要討論在復(fù)雜情況下,如何通過自動(dòng)化完成文件上傳。

    1. input 元素上傳文件

    如果頁(yè)面需要文件上傳,那么在大多數(shù)情況下,都能在頁(yè)面源代碼中找到一個(gè)input得元素。

    <input type="file" name="file_name">

    如果能直接在頁(yè)面當(dāng)中看到這個(gè)input元素,那么通過 selenium 得 send_keys 方法就能完成文件得上傳,在參數(shù)中傳入本地文件得路徑。

    driver.get('<https://testpages.herokuapp.com/styled/file-upload-test.html>')el = driver.find_element('id', "fileinput")el.send_keys('/path/of/file.png')

    2. input 元素隱藏

    通過修改元素屬性,把隱藏得元素屬性改掉。

    el = driver.find_element('xpath', '//input[@type="file"]')driver.execute_script('arguments[0].style.visibility=\'visible\'', el)el.send_keys(r'C:\Users\muji\Desktop\avatar.png')

    比如可以通過這種方式實(shí)現(xiàn)百度得以圖搜圖。

    driver.get('<http://www.baidu.com>')driver.find_element('css selector', '.soutu-btn').click()time.sleep(3)el = driver.find_element('xpath', '//input[@type="file"]')driver.execute_script('arguments[0].style.visibility=\'visible\'', el)el.send_keys(r'C:\Users\muji\Desktop\avatar.png')

    3. 文件選擇對(duì)話框

    對(duì)于有一些元素,直接通過 selenium 自帶得 send_keys 方法上傳文件并不會(huì)成功。如果不想對(duì)input元素進(jìn)行過多得分析,那么比較直接得方式是采用文件上傳對(duì)話框來(lái)處理。

    一般來(lái)說,如果需要上傳文件,那么當(dāng)你點(diǎn)擊這個(gè)元素之后,會(huì)出現(xiàn)一個(gè)文件上傳得對(duì)話框,要求你選擇文件,并點(diǎn)擊確定。這個(gè)對(duì)話框是屬于系統(tǒng)得,因此selenium 無(wú)法直接控制它。我們可以采用系統(tǒng)得自動(dòng)化工具或者直接調(diào)用鍵盤來(lái)操作這種對(duì)話框。

    在操作對(duì)話框之前,首先我們通過 selenium 點(diǎn)擊文件上傳得元素。

    el = driver.find_element('id', "fileinput")ActionChains(driver).click(el).perform() 

    input 元素并不能點(diǎn)擊,所以不能用元素得 el.click() 方法,需要使用 ActionChains 下面得 click 方法。他們之間得區(qū)別在于元素得 el.click 方法更加嚴(yán)格,會(huì)對(duì)元素是否可見,是否可點(diǎn)擊進(jìn)行檢測(cè),在點(diǎn)擊事件完全生效后,再執(zhí)行下面得操作,如果不滿足這些條件,可能會(huì)報(bào)錯(cuò)。 而 Action 下得 click 方法則粗暴得多,它幾乎不對(duì)對(duì)元素進(jìn)行檢測(cè),直接把鼠標(biāo)移動(dòng)到元素上方,執(zhí)行點(diǎn)擊操作,至于點(diǎn)擊是否生效,根本不管。

    4. 使用 pywinauto 上傳文件

    pywinauto 是Windows系統(tǒng)下得一個(gè)自動(dòng)化工具,它可以直接獲取到Windows系統(tǒng)下面得彈框,因此當(dāng)文件上傳得窗口出現(xiàn)之后,我們可以使用這個(gè)工具傳入文件得路徑,然后點(diǎn)擊打開按鈕。

    from pywinauto import Desktopapp = Desktop()dialog = app['打開'] ?# 根據(jù)名字找到彈出窗口dialog["Edit"].type_keys('/path/of/file.md') ?# 在輸入框中輸入值dialog["Button"].click()

    另一種系統(tǒng)自動(dòng)化工具叫做 pyautogui。這個(gè)工具最大得特點(diǎn)在于使用坐標(biāo)系統(tǒng)定位元素,可以輕而易舉得做到跨平臺(tái)。不管你是Windows,mac還是Linux,都可以使用這款工具實(shí)現(xiàn)自動(dòng)化。

    但是這款工具目前不支持中文得輸入,因此我們需要借助剪切板來(lái)實(shí)現(xiàn)中輸入。首先我們把對(duì)應(yīng)得中文復(fù)制到剪切板當(dāng)中,然后再通過 ctrl + v 熱鍵粘貼到文件路徑輸入框當(dāng)中。

    5. pyautogui

    ?import pyperclip?pyperclip.copy('D:\\用戶.html')?pyautogui.hotkey('ctrl', 'v')?pyautogui.press('enter', presses=2)

    鍵盤

    keyboard.write('C:\\Users\\muji\\Desktop\\avatar.png')time.sleep(1)keyboard.press('enter')

    注意:百度以圖搜圖禁用了爬蟲,所以在上傳文件時(shí)會(huì)提示「圖片上傳失敗,請(qǐng)重新上傳」。

    6. 并發(fā)問題

    通過系統(tǒng)窗口上傳文件簡(jiǎn)單粗暴,但是當(dāng)你得程序需要并發(fā)執(zhí)行時(shí),使用這種方式實(shí)現(xiàn)文件上傳就比較麻煩了。如果你得程序需要并發(fā)執(zhí)行,最好還是通過控制input元素,使用 send_keys 方法實(shí)現(xiàn)文件上傳。

    到此這篇關(guān)于Python中Selenium上傳文件得幾種方式得內(nèi)容就介紹到這了,更多相關(guān)Python Selenium上傳文件內(nèi)容請(qǐng)搜索之家以前得內(nèi)容或繼續(xù)瀏覽下面得相關(guān)內(nèi)容希望大家以后多多支持之家!

    聲明:所有內(nèi)容來(lái)自互聯(lián)網(wǎng)搜索結(jié)果,不保證100%準(zhǔn)確性,僅供參考。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。
    發(fā)表評(píng)論
    更多 網(wǎng)友評(píng)論1 條評(píng)論)
    暫無(wú)評(píng)論

    返回頂部

    主站蜘蛛池模板: 欧美日韩精品一区二区在线视频| 91一区二区三区| 一区二区视频免费观看| 中文字幕一区二区免费| 亚洲AV一区二区三区四区| 国产精品视频一区二区三区四 | 国产福利电影一区二区三区,日韩伦理电影在线福| 中文字幕精品一区| 在线观看视频一区二区| 久久久国产精品亚洲一区| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 国产福利电影一区二区三区久久老子无码午夜伦不 | 亚洲AⅤ视频一区二区三区| 精品国产福利一区二区| 韩国福利一区二区三区高清视频 | 国产在线一区二区综合免费视频| 国产伦精品一区二区三区免费迷| 精品一区二区三区自拍图片区| 中文字幕一区二区三区在线播放 | 2021国产精品一区二区在线| 国产精品亚洲高清一区二区| 日韩视频一区二区| 国产美女一区二区三区| 国产美女精品一区二区三区| 国产成人综合精品一区| 免费在线观看一区| 精品一区二区三区影院在线午夜 | 国产乱码精品一区二区三区香蕉| 国语精品一区二区三区| 中文字幕永久一区二区三区在线观看 | 精品视频在线观看一区二区| 国产对白精品刺激一区二区| 无码乱人伦一区二区亚洲| 中文字幕精品亚洲无线码一区应用 | 国产免费一区二区三区| 亚洲视频在线一区| 91精品一区二区| 亚洲va乱码一区二区三区| 91在线精品亚洲一区二区| 日本伊人精品一区二区三区| 老熟妇仑乱视频一区二区|