-1
votes

Comment faire du pilote attendre jusqu'à 10 secondes pour cliquer sur le lien hypertexte

Dans l'URL ci-dessous, je dois cliquer sur une icône de messagerie hypertexte, parfois il ne fonctionne que même le code est correct, dans ce cas, le pilote doit attendre jusqu'à 10 secondes et passer au niveau suivant

https://www.sciencepeirect.com/science/article/pii/s1001841718305011 XXX

Comment utiliser explicitement ou implicitement attendre ici-- "Tag.click ()"


1 commentaires

Voulez-vous cliquer sur les deux liens avec les deux icônes de courrier adjacentes à ce double nom Weibingzhang, Junhongqian @scoop Realm?


5 Réponses :


-1
votes

Utilisez la fonction intégrée.Sleep () xxx


8 commentaires

non monsieur c'est en boucle, le pilote devrait attendre jusqu'à 10 secondes pour cliquer sur le lien, y compris la réussite ou omet de cliquer dessus devrait passer au niveau suivant, nous devons donc utiliser explicitement ou implicitement attendre ici, mais je ne sais pas comment à utiliser ici pour "tag.click ()"


Je suis désolé, je ne comprends pas ce que vous essayez de faire, pourriez-vous fournir une meilleure explication s'il vous plaît? Utilisation du temps.sleep (10) attendra 10 secondes avant de continuer à Tag.click (), n'est-ce pas ce que vous voulez?


S'il vous plaît définir "partir et aller au niveau suivant", voulez-vous continuer à continuer la boucle? En outre, qu'est-ce qui détermine combien de temps il devrait attendre.


Monsieur, il n'est pas nécessaire d'attendre exactement 10 secondes, il devrait attendre jusqu'à 10 secondes, s'il est fonctionné, cela passera au niveau suivant, sinon après 10 secondes, cela passera au niveau supérieur.


Il s'agit des résultats de recherche ScienceReect.com/.../a>


Ici, nous ne donnons que 10 secondes à chaque résultat de recherche si cela fonctionne, bien ça va revenir, sinon il devrait revenir après 10 secondes et aller au résultat suivant, c'est ce que je veux


Voici ce que vous voulez Stackoverflow.com / Questions / 21827874 / ...


Oui, comme si le délai d'attente n'est survenu: Imprimer 'Myfunc n'a pas exécuté complètement' Sinon: Imprimer 'MyFunc Terminé'



0
votes

En tant que de côté .. Vous pouvez extraire les courriels de contact de l'auteur (qui sont identiques au clic) de Json comme chaîne dans l'un des scripts

import requests
headers = {
    'User-Agent' : 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
          }
data = requests.get('https://www.sciencedirect.com/sdfe/arp/pii/S1001841718305011/recommendations?creditCardPurchaseAllowed=true&preventTransactionalAccess=false&preventDocumentDelivery=true', headers = headers).json()   
print(data)


3 commentaires

monsieur c'est bien mais avec des mails, j'ai besoin d'un nom d'auteur, d'un titre d'article, d'un nom de journal, d'une année et d'un numéro d'émission dans une seule ligne, s'il y a 10 auteurs, je dois imprimer tous les détails ci-dessus, car j'ai écrit le code et tout est Allez bien, mais parfois, il ne faut pas exécuter Tag.click () dans le résultat de la recherche. Pour continuer la boucle quand il est échoué, il devrait revenir. Les résultats de la recherche sont ici ScienceReect.com/.../a>


Le nom de la revue est-il considéré comme des lettres chimiques chinoises? Et quel est le numéro de problème s'il vous plaît?


Pour une URL unique, il est correct, pour chaque mot clé, il y a environ 6 000 résultats à traiter, passez à travers ce lien " sciencedirect.com/... ", pour chaque lien que nous devons analyser et extraire à nouveau les détails nécessaires à ce sujet, est-ce que cela devient de nouveau travail?



0
votes

Vous devez attendre que l'élément soit cliquable. Vous pouvez le faire avec webdiverwait code> fonction.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get('url')

elements = driver.find_elements_by_xpath('xpath')

for element in elements:
    try:
        WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.LINK_TEXT, element.text)))
    finally:
        element.click()


4 commentaires

Oui monsieur, mais comment appliquer WebDriver Waitez dans mon code, webDriver doit attendre 10 secondes jusqu'à ce que "Tag.click ()"


Par exemple, avec webDriverwait (pilote, 10). Jeuil (EC.Element_TO_BE_Clickable ((by.link_text, élément.text)))


Pourquoi essayer / enfin?


Si la fonction webDriverwait échoue à "Rechercher" l'élément que vous pouvez toujours essayer de cliquer dessus.



0
votes

Vous pouvez essayer comme ci-dessous de cliquer sur les hyperliens contenant l'icône de courrier. Lorsqu'un clic est initié, une boîte de fenêtre contextuelle apparaît contenant des informations supplémentaires. Le script suivant peut aller chercher l'adresse e-mail de là. C'est toujours un grand problème de creuser quoi que ce soit lorsque svg est là. J'ai utilisé beauxoups bibliothèque pour l'utilisation de .extract () fonction pour lancer l'élément svg afin que le script puisse atteindre le script Contenu. xxx

sortie: xxx


0 commentaires

0
votes

De ma compréhension, après que l'élément cliqué, il faut attendre que l'auteur Popup apparaisse puis extraire à l'aide de Détails () CODE>?

tags = driver.find_elements_by_css_selector('svg.icon-envelope')

if tags:
    for tag in tags:
        tag.click()
        # wait until author dialog/popup on the right appear
        WebDriverWait(driver, 10).until(
            lambda d: d.find_element_by_class_name('e-address') # selector for email
        )
        try:
            details()
            # close the popup
            driver.find_element_by_css_selector('button.close-button').click()

        except Exception as ex:
            print(ex)
            continue


0 commentaires