Automatisation du navigateur Selenium comment télécharger des fichiers

Prenez l'habitude d'écrire ensemble ! C'est le 4ème jour de ma participation au "Nuggets Daily New Plan·April Update Challenge", cliquez pour voir les détails de l'événement .

Selenium encapsule les opérations de téléchargement de fichiers prêtes à l'emploi. Mais avec le développement de frameworks frontaux modernes, il existe de plus en plus de façons de télécharger des fichiers. Pour certains contrôles de téléchargement de fichiers, il sera plus compliqué d'automatiser le contrôle. Cet article explique principalement comment automatiser les téléchargements de fichiers dans des situations complexes.

1. L'élément d'entrée télécharge le fichier

Si la page nécessite un téléchargement de fichier, dans la plupart des cas, un élément d'entrée peut être trouvé dans le code source de la page.

<input type="file" name="file_name">
复制代码

Si vous pouvez voir l'élément d'entrée directement dans la page, vous pouvez télécharger le fichier via la méthode send_keys de selenium et transmettre le chemin du fichier local dans le paramètre.

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. L'élément d'entrée est masqué

Modifiez les attributs d'élément cachés en modifiant les attributs d'élément.

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')
复制代码

Par exemple, la recherche d'images de Baidu peut être réalisée de cette manière.

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. Boîte de dialogue de sélection de fichier

Pour certains éléments, le téléchargement de fichiers directement via la méthode send_keys fournie avec le sélénium échouera. Si vous ne voulez pas trop analyser l'élément d'entrée, le moyen le plus direct consiste à utiliser la boîte de dialogue de téléchargement de fichier pour le gérer.

De manière générale, si vous avez besoin de télécharger un fichier, alors lorsque vous cliquez sur cet élément, une boîte de dialogue de téléchargement de fichier apparaît, vous demandant de sélectionner le fichier et de cliquer sur OK. Cette boîte de dialogue appartient au système, donc Selenium ne peut pas la contrôler directement. Nous pouvons utiliser les outils automatisés du système ou invoquer directement le clavier pour faire fonctionner cette boîte de dialogue.

Avant d'utiliser la boîte de dialogue, nous cliquons d'abord sur l'élément du téléchargement de fichier via le sélénium.

el = driver.find_element('id', "fileinput")
ActionChains(driver).click(el).perform()
复制代码

L'élément d'entrée ne peut pas être cliqué, donc la méthode el.click() de l'élément ne peut pas être utilisée, et la méthode click sous ActionChains doit être utilisée. La différence entre eux est que la méthode el.click de l'élément est plus stricte, et elle détectera si l'élément est visible et cliquable. Une fois que l'événement click est pleinement effectif, les opérations suivantes sont effectuées. Si ces conditions ne sont pas remplies , une erreur peut être signalée. La méthode de clic sous Action est beaucoup plus grossière. Elle détecte à peine l'élément, déplace directement la souris sur l'élément et effectue l'opération de clic. Quant à savoir si le clic prend effet, cela n'a pas d'importance du tout.

4. Utilisez pywinauto pour télécharger des fichiers

pywinauto est un outil d'automatisation sous le système Windows, il peut directement obtenir la boîte de dialogue sous le système Windows, donc lorsque la fenêtre de téléchargement de fichier apparaît, nous pouvons utiliser cet outil pour passer le chemin du fichier, puis cliquez sur le Bouton d'ouverture.

from pywinauto import Desktop

app = Desktop()
dialog = app['打开']  # 根据名字找到弹出窗口
dialog["Edit"].type_keys('/path/of/file.md')  # 在输入框中输入值
dialog["Button"].click()
复制代码

Un autre outil d'automatisation du système s'appelle pyautogui. La principale caractéristique de cet outil est qu'il utilise le système de coordonnées pour localiser les éléments, qui peuvent facilement être multiplateformes. Que vous soyez Windows, Mac ou Linux, vous pouvez utiliser cet outil pour automatiser.

Cependant, cet outil ne prend pas actuellement en charge la saisie en chinois, nous devons donc utiliser le presse-papiers pour obtenir la saisie en chinois. Tout d'abord, nous copions le chinois correspondant dans le presse-papiers, puis le collons dans la zone de saisie du chemin du fichier via le raccourci clavier ctrl + v.

5. pyautogui

 import pyperclip

 pyperclip.copy('D:\\\\用户.html')
 pyautogui.hotkey('ctrl', 'v')
 pyautogui.press('enter', presses=2)
复制代码

clavier

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

Remarque : Baidu a désactivé le robot d'exploration pour la recherche d'images. Par conséquent, lors du téléchargement d'un fichier, le message "Échec du téléchargement de l'image, veuillez le télécharger à nouveau" s'affichera.

6. Problèmes de concurrence

Le téléchargement de fichiers via la fenêtre système est simple et grossier, mais lorsque votre programme doit être exécuté simultanément, il est plus gênant d'utiliser cette méthode pour télécharger des fichiers. Si votre programme doit s'exécuter simultanément, il est préférable d'utiliser la méthode send_keys pour télécharger des fichiers en contrôlant l'élément d'entrée.

Je suis Jiushan, merci pour votre lecture patiente, à la prochaine fois.

Je suppose que tu aimes

Origine juejin.im/post/7082768742538543112
conseillé
Classement