bases de programmation python: + sélénium python atteindre boîte QQ atterrissage automatique et fonction d'envoi de courrier

Cet article décrit le sélénium + python atterrissage automatique boîte aux lettres QQ et envoyer le courrier fonctionnalité article pour partager avec le code échantillon complet, les amis de besoin peuvent se référer au
sélénium courant faire un exemple détaillé, je rencontrerai dans l'élément de positionnement certains d'obstruction et de l' expérience aux autres.
(Navigateur Chrome)
(obligatoire uniquement si le code final complet, s'il vous plaît aller directement à l'article dernier)

Navigateur open URL de connexion de boîte aux lettres QQ

adresse de connexion QQ-mail: https: //mail.qq.com/

from selenium import webdriver
import time
zhengyi = webdriver.Chrome()
zhengyi.get('https://mail.qq.com/')

Cette étape ne connaît pas les problèmes à temps pourquoi bibliothèque d'importation, continue à dire.

positionnement élément, numéro de compte QQ QQ et entrée de mot de passe
manuellement dans la page de connexion QQ-mail, appuyez sur F12 pour ouvrir les outils de développement, cliquez sur Afficher élément, sélectionnez l'élément: Insérer ici l'image Description
vous pouvez voir l' encadré d'entrée de l' identifiant de compte QQ, le nom et d' autres attributs, sont prennent directement choisir un bon emplacement.
J'ai choisi ici la méthode XPath plus courante pour localiser, id = « u », et entrez le compte QQ avec un événement d'envoi
(peut également être utilisé pour localiser zhengyi.find_element_by_id ( « u »), le code plus clair, mais personnellement , je l' habitude d'adopter une XPath commune ) de zhengyi.find_element_by_xpath('//*[@id="u"]').send_keys("XXXXXXXXX")
même, l' élément mot de passe QQ attribut id = « p », le même procédé de positionnement

zhengyi.find_element_by_xpath('//*[@id="p"]').send_keys("XXXXXXXX")

Puis le même ordre d'idées, le bouton de connexion id attribut élément = « login_button », il n'y a pas besoin d'envoyer des informations, j'ai donc choisi de cliquer événement click

zhengyi.find_element_by_xpath('//*[@id="login_button"]').click()

Eh bien, en principe, à ce jour, exécutez PyCharm devrait être en mesure d'entrer le numéro de compte et mot de passe et connectez-vous avec succès.
mais les choses ne sont pas si simples, après la découverte en cours d' exécution, erreur de sélénium, ne peut pas trouver les éléments id u.

Vous connaissez une observation attentive, nous avons trouvé une page imbriquée cadre en jeu.
Nous pouvons comprendre que chaque page est un parent du cadre, depuis le début de notre visite sur ce site Web, il est entré dans l'imbrication de cadre parent. Comme son nom l' indique, il a un parent qui est enfant. cadre (père) dans un iFrame imbriqué (enfant), si l' on veut trouver des éléments dans l'iframe, nous devons passer à l'iframe.
élément iframe a aussi ses propres attributs, le sélénium fournit également une méthode pour nous de commutateur d'utilisation

F12 à nouveau à la recherche des informations iframe, iframe peut - être voir imbriqué, id et le nom sont « login_frame » Insérer ici l'image Description
avant l'élément de positionnement pour entrer le code suivant:

zhengyi.switch_to.frame("login_frame")

Cela passera à l'élément iFrame positionné pour continuer avant, vous pouvez réussir.
Le code complet pour cette étape est:

# 定位login_frame
zhengyi.switch_to.frame("login_frame")
zhengyi.find_element_by_xpath('//*[@id="switcher_plogin"]').click()
# 定位账号、密码,并输入
zhengyi.find_element_by_xpath('//*[@id="u"]').send_keys("839811794")
zhengyi.find_element_by_xpath('//*[@id="p"]').send_keys("199306zy")
# 定位登录按钮
zhengyi.find_element_by_xpath('//*[@id="login_button"]').click()

Cette fois, le site a été avec succès boîte aux lettres QQ.

positionnement des éléments, l'interface écriture

Continuer, après une connexion réussie de la boîte aux lettres, est venu à écrire l'interface, selon les pratiques traditionnelles, il faut cliquer sur le bouton d'écriture de coin en haut à gauche pour étendre l'interface lettre spécifique

La même méthode, F12 pour fonctionner, voir l'élément bouton lettre positionné id = « composebtn », cliquez sur Envoyer des choses

件# 定位写信按钮
zhengyi.find_element_by_xpath('//*[@id="composebtn"]').click(

Ce débogueur, le succès du sélénium des résultats Web ouvert positionné à moins d'une id composebtn.
Cette fois -ci a exposé les problèmes sur un lien, le code avant de passer l'iframe login_frame imbriqué, l'élément d'écriture à la fois, pas un iframe, donc avant la mise en place, il est nécessaire de quitter le nid pour revenir au document principal

zhengyi.switch_to.default_content()

Un tel commutateur imbriqué au document principal, et exécuter à nouveau le programme, ou trouver une erreur

Par chèque bancaire à plusieurs reprises des informations, et a finalement trouvé une lettre dans la QQ apparaît après la connexion. Après le moment de l' atterrissage , si nous sommes allés à trouver un bouton lettre, cette fois par la vitesse du réseau, l'impact du PC objectif, elle ne localise pas les éléments.
Nous avons seulement besoin d'ajouter un sommeil d' une seconde, vous pouvez perfectionner la solution. (Cette fois -ci reflète le rôle du chef de file dans la bibliothèque de temps ~)

#离开login_frame
 zhengyi.switch_to.default_content()
 #等待一秒
 time.sleep(1)
 # 定位写信按钮
 zhengyi.find_element_by_xpath('//*[@id="composebtn"]').click()

Cela vous permet de localiser un bouton de lettre, entrez e-mail aux étapes

éléments de positionnement, envoyer un courrier électronique Insérer ici l'image Description
éditeur de contenu du message comporte quatre parties, les bénéficiaires, sous réserve, le corps, et enfin cliquez sur le bouton Envoyer

Avant de monter à travers chaque élément de la fosse, à ce point, je iFrame imbriqué deviennent un positionnement très prudent sont prêts à observer si l'iFrame imbriqué.
Effectivement, le « To », « Subject » et « Envoyer » dans le document principal est mainFrame imbriquées, et « texte » a été sous-cadre mainFrame de imbriqué.

ainsi, cette logique de l'étape:

1, passez à mainFrame,
2, situez respectivement les bénéficiaires et appel sous réserve d'envoyer événement
3, continuer à passer à sous-Frame
4, le texte de positionnement, appel à envoyer événement
5, le sous-cadre, pour revenir à son cadre parent, qui est, est en mainFrame
6, recherchez le bouton d'envoi, appelez l'événement click

Cette étape, il y a beaucoup moins que l'intention de la fosse:

1, localiser les destinataires et trouvé navigate aux éléments, ainsi que des sous-div, par simulation, nous avons constaté que seul le deuxième élément sous-div est vraiment en mesure de localiser le destinataire, de sorte que le premier identifiant de positionnement = « toAreaCtrl », et sélectionner la seconde entrée en tant que la position de div.
Ciblage spécifique contenu XPath: "// * [@ ID = 'toAreaCtrl'] / div [2] / INPUT"
Insérer ici l'image Description
2. Le même problème se pose pour localiser le destinataire, après la mise au moût Mainframe, positionner le destinataire précédemment, en plus d' une exécution différée, ou sera incapable de localiser l'élément destinataire. Pour des raisons inconnues, donc je pense que si vous rencontrez plus tard des éléments de positionnement ne peut pas, vous pouvez essayer d'ajouter un time.sleep.

3. positionner le corps, pour passer de mainFrame iframe, id trouvé iframe et le nom est une chaîne de nombres de façon dynamique, mais ne supporte que id ou nom fixe switch_to.frame. Nous voulons donc dans l'autre sens, pour être XPath classe positionnement iframe, puis passé à switch_to.frame commutateur. Plus précisément:

#切换到iframe
zhengyi.switch_to.frame(zhengyi.find_element_by_xpath('//*[@class="qmEditorIfrmEditArea"]'))

Insérer ici l'image Description
4. Le corps du besoin de messages pour appeler un événement click activé pour démarrer l'événement d'envoi. Si vous ne cliquez pas sur le premier puis écrire, puis envoyer le contenu du sujet seront placés derrière la zone de texte. (Je ne sais pas pourquoi il y a un tel réglage ~)

somme ainsi jusqu'à cette étape du code:

# 切换到mainFrame
zhengyi.switch_to.frame('mainFrame')
time.sleep(1)
# 定位收件人,并输入
zhengyi.find_element_by_xpath("//*[@id='toAreaCtrl']/div[2]/input").send_keys("[email protected]")
# 定位主题,并输入
zhengyi.find_element_by_xpath('//*[@id="subject"]').send_keys("来自zhengyi的邮件")
# 定位邮件正文,先进入到iframe
zhengyi.switch_to.frame(zhengyi.find_element_by_xpath('//*[@class="qmEditorIfrmEditArea"]'))
# 必须先点击正文,再send_keys
zhengyi.find_element_by_xpath('/html/body').click()
zhengyi.find_element_by_xpath('/html/body').send_keys("Hello World","\nZhengyi")
# 返回到mainframe
zhengyi.switch_to.parent_frame()
# 定位发送按钮
zhengyi.find_element_by_xpath('//*[@name="sendbtn"]').click()

(Il est cette courte période de dizaines de lignes, consomment beaucoup de cellules cérébrales mortes)

Les éléments sont positionnés résumé

1, cadre est très important, il faut regarder si imbriquée, et l' attention de commutation
2, id ou élément de nom si elle est dynamique, s'il vous plaît donner
3, positionné avec parfumé XPath
4, si l'élément a un nœud enfant, en utilisant un chemin relatif continue localisation
5, vraiment aucune raison pour ne positionnement d'enquête, essayez d' utiliser time.sleep ()

Le code de programme final

from selenium import webdriver
#导入时间模块
import time
# 注意大写Chrome的C
zhengyi = webdriver.Chrome()
zhengyi.get('https://mail.qq.com/')
# 定位login_frame
zhengyi.switch_to.frame("login_frame")
zhengyi.find_element_by_xpath('//*[@id="switcher_plogin"]').click()
# 定位账号、密码,并输入
zhengyi.find_element_by_xpath('//*[@id="u"]').send_keys("839811794")
zhengyi.find_element_by_xpath('//*[@id="p"]').send_keys("199306zy")
# 定位登录按钮
zhengyi.find_element_by_xpath('//*[@id="login_button"]').click()
# 离开login_frame
# zhengyi.switch_to.parent_frame()
zhengyi.switch_to.default_content()
# 等待一秒
time.sleep(1)
# 定位写信按钮
zhengyi.find_element_by_xpath('//*[@id="composebtn"]').click()
# 切换到mainFrame
zhengyi.switch_to.frame('mainFrame')
time.sleep(1)
# 定位收件人,并输入
zhengyi.find_element_by_xpath("//*[@id='toAreaCtrl']/div[2]/input").send_keys("[email protected]")
# 定位主题,并输入
zhengyi.find_element_by_xpath('//*[@id="subject"]').send_keys("来自zhengyi发来的邮件")
# 定位邮件正文,先进入到iframe
zhengyi.switch_to.frame(zhengyi.find_element_by_xpath('//*[@class="qmEditorIfrmEditArea"]'))
# 必须先点击正文,再send_keys
zhengyi.find_element_by_xpath('/html/body').click()
zhengyi.find_element_by_xpath('/html/body').send_keys("Hello World","\nZhengyi")
# 返回到mainframe
zhengyi.switch_to.parent_frame()
# 定位发送按钮
zhengyi.find_element_by_xpath('//*[@name="sendbtn"]').click()
time.sleep(5)
#关闭浏览器
zhengyi.quit()

conseils

Les points de partage dans les outils de développement, les conseils plus pratiques:

1, outils de développement, l'élément sélectionné, cliquez sur Console, peut être très intuitive pour voir si l'élément iFrame est imbriqué Insérer ici l'image Description
2, les éléments, les éléments de sélection veulent localiser, à droite -copy-Copy XPath, vous pouvez copier des éléments directement XPath
3 J'espère que vous pouvez me donner des conseils à part que
je vous écris, pour tout le monde de recommander un très large rassemblement de ressources d'apprentissage python, cliquez pour entrer , il y a un programmeur senior avant d' apprendre à part

L'expérience, des notes d'étude, il y a une chance d'expérience en affaires, et pour tout le monde d'organiser soigneusement un python de combat basé élément zéro de l'information,

jour Python pour vous sur les dernières technologies, les perspectives, apprendre à laisser un message de petits détails

résumé

Ce sont les petites séries pour introduire la boîte aux lettres de sélénium + python atterrissage automatique QQ et fonction d'envoi de courrier, nous voulons aider

Publié 67 articles originaux · a gagné les éloges 25 · vues 110 000 +

Je suppose que tu aimes

Origine blog.csdn.net/haoxun11/article/details/105169775
conseillé
Classement