Automatisation des Erreurs: 800706B5, 80004005, 80010108 apparaissent interne SAP site gratter
Je suis en train d'écrire une macro qui permet de gratter mes internes à l'entreprise, SAP site pour l'information sur le fournisseur. Pour plusieurs raisons, j'ai utiliser VBA pour le faire. Cependant, je ne peux pas comprendre pourquoi je reçois ces trois erreurs lorsque j'essaie de gratter la page. Est-il possible que cela a quelque chose à voir avec la Contrôle de compte d'utilisateur de l'intégrité du modèle? Ou est-il quelque chose de mal avec mon code? Est-il possible pour une page web à l'aide de http peut être géré différemment dans internet explorer? Je suis capable d'aller à une page web, même d'autres pages web, et peut gratter chacun de ceux qui viennent d'amende. Mais quand je tente de me gratter la SÈVE de la page, j'obtiens ces erreurs. La description des erreurs et quand ils se produisent sont:
800706B5 - L'interface est inconnue (qui se produit lorsque je place des points d'arrêt avant d'exécuter le code fautif)
80004005 - non spécifié erreur se produit lorsque je n'ai pas d'erreurs et de laisser la macro à exécuter)
80010108 - L'Objet invoqué s'est déconnecté de ses clients. (Je n'arrive pas à obtenir une cohérence de l'apparition de cette erreur, il semble se passer dans le temps que quelque chose dans excel est tellement corrompu qu'aucun chargement de la page et j'ai réinstaller excel)
Je n'ai absolument aucune idée de ce qui se passe. L'Intégrité de la page n'a pas beaucoup de sens pour moi, et toutes les recherches que j'ai trouvé sur ce parlé de la connexion à des bases de données et à l'aide d'ADO et références COM. Cependant, je fais tout par Internet Explorer. Voici mon code ci-dessous:
Private Sub runTest_Click()
ie.visible = True
doScrape
End Sub
'The code to run the module
Private Sub doTest()
Dim result As String
result = PageScraper.scrapeSAPPage("<some num>")
End Sub
PageScraper Module
Public Function scrapeSAPPage(num As Long) As String
'Predefined URL that appends num onto end to navigate to specific record in SAP
Dim url As String: url = "<url here>"
Dim ie as InternetExplorer
set ie = CreateObject("internetexplorer.application")
Dim doc as HTMLDocument
ie.navigate url 'Will always sucessfully open page, regardless of SAP or other
'pauses the exection of the code until the webpage has loaded
Do
'Will always fail on next line when attempting SAP site with error
If Not ie.Busy And ie.ReadyState = 4 Then
Application.Wait (Now + TimeValue("00:00:01"))
If Not ie.Busy And ie.ReadyState = 4 Then
Exit Do
End If
End If
DoEvents
Loop
Set doc = ie.document 'After implementation of Tim Williams changes, breaks here
'Scraping code here, not relevant
End Function
J'utilise IE9 et Excel 2010 sur une machine Windows 7. Toute aide ou insight, vous pouvez fournir serait grandement apprécié. Merci.
Do
boucle avec un seul, mais plus long (par exemple 5 ou 10 sec) appel à Wait
? Ça marche alors?Qui a pu m'obtenir passé le problème de l'interface avec le
.busy
et .Readystate
, mais il renvoie toujours le message d'erreur quand j'essaie de faire autre chose, comme récupérer le document html. Une idée de pourquoi ce qui se passe?Est votre PageScraper objet peut-être de sortir de la portée à un certain point?
Non, je ne peux pas voir tout point où il serait hors de portée. J'ai ajouté la ligne suivante, où il se casse après votre suggestion. À ce stade, il est le seul module qui est en cours d'exécution. Je suis l'aide d'une classe de test qui est prévu pour servir de ce module.
Set doc = ie.document
?? Et quel est le message d'erreur exact?OriginalL'auteur derigible | 2012-08-10
Vous devez vous connecter pour publier un commentaire.
Je fais ce type de grattage fréquemment et ont constaté qu'il est très difficile de faire IE travail d'automatisation à 100% fiable, avec des erreurs comme celles que vous avez trouvé. Comme ils sont souvent les problèmes de synchronisation, il peut être très frustrant pour déboguer qu'ils n'apparaissent pas lors de l'étape à, seulement pendant le live fonctionne Pour minimiser les erreurs que j'ai faites ce qui suit:
Introduire plus de retards; ie.occupé et ie.ReadyState ne sont pas nécessairement donner des réponses valables IMMÉDIATEMENT après un ie.naviguer, afin de présenter un court délai après l'ie.naviguer. Pour les choses que je suis de chargement de 1 à 2 secondes normalement, mais rien de plus de 500ms semble fonctionner.
Assurez-vous que IE est dans un état de propreté en allant ie.naviguer dans "about:blank" avant d'aller à l'url cible.
Après cela, vous devriez avoir une validité IE objet, et vous aurez à regarder pour voir ce que vous avez à l'intérieur. Généralement je éviter d'essayer d'accéder à l'ensemble de l'ie.document et au lieu d'utiliser IE.document.tous les.les balises("x") où 'x' est une bonne chose que je suis à la recherche tels que les td ou un.
Cependant, après toutes ces améliorations, bien qu'ils aient augmenté mon taux de réussite j'ai encore des erreurs au hasard.
Ma solution a été d'abandonner IE et au lieu de faire mon travail à l'aide de xmlhttp.
Si vous êtes l'analyse de vos données à l'aide de texte opérations sur le document, puis il sera un no-brainer pour échanger. L'objet xmlhttp est BEAUCOUP plus fiable. et vous obtenez juste le "responsetext" pour accéder à l'intégralité du code html du document.
Voici une version simplifiée de ce que je suis en utilisant dans la production maintenant pour gratter, c'est tellement fiable qu'il exécute pour la nuit, générant des millions de lignes sans erreur.
Espère que ça aide.
J'ai été en utilisant IE objet avant un URLdownload fonction de s'authentifier sur le serveur avant de le télécharger autrement il ne pourrait pas. J'ai changé pour XMLHTTP et il fonctionne 5 fois plus rapide, je vous remercie.
OriginalL'auteur Raymond